|
function Validation_filter_id_card ($id _card)
{
if (strlen ($id _card) = = 18)
{
Return Idcard_checksum18 ($id _card);
}
ElseIf ((strlen ($id _card) = = 15))
{
$id _card = idcard_15to18 ($id _card);
Return Idcard_checksum18 ($id _card);
}
Else
{
return false;
}
}
Calculate ID Check code, according to national standard GB 11643-1999
function Idcard_verify_number ($idcard _base)
{
if (strlen ($idcard _base)! = 17)
{
return false;
}
Weighting factor
$factor = Array (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
Check code corresponding value
$verify _number_list = Array (' 1 ', ' 0 ', ' X ', ' 9 ', ' 8 ', ' 7 ', ' 6 ', ' 5 ', ' 4 ', ' 3 ', ' 2 ');
$checksum = 0;
for ($i = 0; $i < strlen ($idcard _base); $i + +)
{
$checksum + = substr ($idcard _base, $i, 1) * $factor [$i];
}
$mod = $checksum% 11;
$verify _number = $verify _number_list[$mod];
return $verify _number;
}
Upgrade 15-bit ID to 18-bit
function Idcard_15to18 ($idcard) {
if (strlen ($idcard)! = 15) {
return false;
}else{
If the ID sequence code is 996 997 998 999, these are special codes for centenarians older than
if (Array_search ($idcard, substr, 3), Array (' 996 ', ' 997 ', ' 998 ', ' 999 '))!== false) {
$idcard = substr ($idcard, 0, 6). ' Substr ' ($idcard, 6, 9);
}else{
$idcard = substr ($idcard, 0, 6). ' Substr ' ($idcard, 6, 9);
}
}
$idcard = $idcard. Idcard_verify_number ($idcard);
return $idcard;
}
Verification code validity check for 18-bit ID card
function Idcard_checksum18 ($idcard) {
if (strlen ($idcard)! =) {return false;}
$idcard _base = substr ($idcard, 0, 17);
if (Idcard_verify_number ($idcard _base)! = Strtoupper (substr ($idcard, 17, 1))) {
return false;
}else{
return true;
}
}
|