14.05.11 - PHP function for spanish DNI validation
0 comments
PHP function which checks if a given string was a valid spanish DNI/NIE
PHP function which checks if a given string was a valid spanish DNI/NIE:
<?php
/**
* Function which checks if a string is a valid spanish DNI/NIE
*
* @param string $string
* @return boolean
*/
function is_valid_DNI_NIE ($string)
{
//Check length
if (strlen($string) != 9) return false;
//Possible values for the final letter
$letterValues = array(
0 => 'T', 1 => 'R', 2 => 'W', 3 => 'A', 4 => 'G', 5 => 'M',
6 => 'Y', 7 => 'F', 8 => 'P', 9 => 'D', 10 => 'X', 11 => 'B',
12 => 'N', 13 => 'J', 14 => 'Z', 15 => 'S', 16 => 'Q', 17 => 'V',
18 => 'L', 19 => 'H', 20 => 'C', 21 => 'K',22 => 'E'
);
//Check if is a DNI
if (preg_match('/^[0-9]{8}[A-Z]$/i', $string))
{
//Check letter
if (strtoupper($string[strlen($string) - 1]) !=
$letterValues[((int) substr($string, 0, strlen($string) - 1)) % 23])
return false;
//All was ok
return true;
}
//Check if is a NIE
else if (preg_match('/^[XYZ][0-9]{7}[A-Z]$/i', $string))
{
//Comprobar letra
if (strtoupper($string[strlen($string) - 1]) !=
$letterValues[((int) substr($string, 1, strlen($string) - 2)) % 23])
return false;
//All was ok
return true;
}
//Non valid string
return false;
}
/**
* Function which checks if a string is a valid spanish DNI/NIE
*
* @param string $string
* @return boolean
*/
function is_valid_DNI_NIE ($string)
{
//Check length
if (strlen($string) != 9) return false;
//Possible values for the final letter
$letterValues = array(
0 => 'T', 1 => 'R', 2 => 'W', 3 => 'A', 4 => 'G', 5 => 'M',
6 => 'Y', 7 => 'F', 8 => 'P', 9 => 'D', 10 => 'X', 11 => 'B',
12 => 'N', 13 => 'J', 14 => 'Z', 15 => 'S', 16 => 'Q', 17 => 'V',
18 => 'L', 19 => 'H', 20 => 'C', 21 => 'K',22 => 'E'
);
//Check if is a DNI
if (preg_match('/^[0-9]{8}[A-Z]$/i', $string))
{
//Check letter
if (strtoupper($string[strlen($string) - 1]) !=
$letterValues[((int) substr($string, 0, strlen($string) - 1)) % 23])
return false;
//All was ok
return true;
}
//Check if is a NIE
else if (preg_match('/^[XYZ][0-9]{7}[A-Z]$/i', $string))
{
//Comprobar letra
if (strtoupper($string[strlen($string) - 1]) !=
$letterValues[((int) substr($string, 1, strlen($string) - 2)) % 23])
return false;
//All was ok
return true;
}
//Non valid string
return false;
}
Comments
There are no comments jet. Be the first to comment!
