IP Address Validation [message #220056] |
Sun, 18 February 2007 04:27  |
ataufique
Messages: 79 Registered: November 2006
|
Member |
|
|
Has any one written the validation code for
IP Address...
i.e it should be any thing from 0.0.0.0 to 255.255.255.255
pls pass the code...
Thanks in advance..
|
|
|
|
|
|
Re: IP Address Validation [message #390636 is a reply to message #220056] |
Mon, 09 March 2009 01:48   |
harshans
Messages: 1 Registered: March 2009
|
Junior Member |
|
|
CREATE OR REPLACE FUNCTION isvalidip (ipaddr VARCHAR2)
RETURN NUMBER
IS
tmpvar NUMBER;
v_IPaddr VARCHAR2(64);
v_validip INT;
v_pos1 NUMBER;
v_pos2 NUMBER;
v_pos3 NUMBER;
v_pos4 NUMBER;
v_len NUMBER;
v_found_invalid_char NUMBER;
BEGIN
tmpvar := 0;
v_IPaddr := ipaddr;
-- If the IP address is NULL, check if the node name contains a valid IP address
IF (v_ipaddr IS NULL OR v_ipaddr = '' OR v_ipaddr = ' ')
THEN
RETURN 0;
END IF;
-- Check if IP address is valid, if not set IP address to NULL.
v_validip := 0;
-- Trim leading and trailing spaces, if any
v_ipaddr := RTRIM (LTRIM (v_ipaddr));
-- Make sure there are no invalid characters
v_found_invalid_char := 0;
FOR i IN 1 .. LENGTH (v_ipaddr)
LOOP
IF (INSTR ('.0123456789', SUBSTR (v_ipaddr, i, 1)) = 0)
THEN
v_found_invalid_char := 1;
EXIT;
END IF;
END LOOP;
IF (v_found_invalid_char = 0)
THEN
-- Get dot positions
v_pos1 := INSTR (v_ipaddr, '.');
v_len := LENGTH (v_ipaddr);
v_pos2 := v_pos1 + INSTR (SUBSTR (v_ipaddr, - (v_len - v_pos1)), '.');
v_pos3 := v_pos2 + INSTR (SUBSTR (v_ipaddr, - (v_len - v_pos2)), '.');
-- Check for extra dot positions
v_pos4 := v_pos3 + INSTR (SUBSTR (v_ipaddr, - (v_len - v_pos3)), '.');
-- Check for at least one character and a value less than 255
IF ( v_pos1 > 1
AND v_pos2 - v_pos1 > 1
AND v_pos3 - v_pos2 > 1
AND v_len - v_pos3 > 0
AND v_pos4 = v_pos3
)
THEN
IF (TO_NUMBER (SUBSTR (v_ipaddr, 1, v_pos1 - 1)) <= 255)
AND (TO_NUMBER (SUBSTR (v_ipaddr, v_pos1 + 1, v_pos2 - v_pos1 - 1)) <=
255
)
AND (TO_NUMBER (SUBSTR (v_ipaddr, v_pos2 + 1, v_pos3 - v_pos2 - 1)) <=
255
)
AND (TO_NUMBER (SUBSTR (v_ipaddr, v_pos3 + 1, v_len - v_pos3)) <=
255
)
THEN
v_validip := 1;
END IF;
END IF;
END IF;
/* If IP address in not valid, set it to NULL */
IF v_validip <> 0
THEN
RETURN 1;
v_ipaddr := NULL;
END IF;
RETURN 0;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
WHEN OTHERS
THEN
-- Consider logging the error and then re-raise
RAISE;
END isvalidip;
/
[EDITED by LF: applied [code] tags]
[Updated on: Mon, 09 March 2009 02:16] by Moderator Report message to a moderator
|
|
|
|
Re: IP Address Validation [message #567909 is a reply to message #567869] |
Mon, 08 October 2012 05:00  |
 |
Littlefoot
Messages: 21823 Registered: June 2005 Location: Croatia, Europe
|
Senior Member Account Moderator |
|
|
Split and check them one by one.
The first part (splitting) has been described quite a few times in our SQL & PL/SQL forum (for example, here. Search for more examples.). The second part (validation) is described above.
|
|
|