| 導購 | 订阅 | 在线投稿
分享
 
 
 

PHP身份驗證方面的函數

來源:互聯網  2008-12-22 08:08:02  評論

寫了幾個身份證方面的函數,個人感覺挺有用的,特別是在網絡問卷調查時,對個人信息裏的身份證進行驗證很有用,但是應者寥寥,還是收在自己的blog裏算了。

<?php

// 計算身份證校驗碼,根據國家標准GB 11643-1999

function idcard_verify_number($idcard_base){

if (strlen($idcard_base) != 17){ return false; }

// 加權因子

$factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);

// 校驗碼對應值

$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;

}

// 將15位身份證升級到18位

function idcard_15to18($idcard){

if (strlen($idcard) != 15){

return false;

}else{

// 如果身份證順序碼是996 997 998 999,這些是爲百歲以上老人的特殊編碼

if (array_search(substr($idcard, 12, 3), array('996', '997', '998', '999')) !== false){

$idcard = substr($idcard, 0, 6) . '18'. substr($idcard, 6, 9);

}else{

$idcard = substr($idcard, 0, 6) . '19'. substr($idcard, 6, 9);

}

}

$idcard = $idcard . idcard_verify_number($idcard);

return $idcard;

}

// 18位身份證校驗碼有效性檢查

function idcard_checksum18($idcard){

if (strlen($idcard) != 18){ return false; }

$idcard_base = substr($idcard, 0, 17);

if (idcard_verify_number($idcard_base) != strtoupper(substr($idcard, 17, 1))){

return false;

}else{

return true;

}

}

?>

其中的$idcard_base是指身份證中的本位碼,本位碼是18位身份證裏才有的,也就是18位身份證的前17位,最後一位稱爲校驗碼

一般在使用的時候不用直接調用idcard_verify_number(),平時的應用大多是使用後兩個函數

這些函數都沒有關心身份證字符串的格式問題,在調用前自行進行格式檢查

寫了幾個身份證方面的函數,個人感覺挺有用的,特別是在網絡問卷調查時,對個人信息裏的身份證進行驗證很有用,但是應者寥寥,還是收在自己的blog裏算了。 <?php // 計算身份證校驗碼,根據國家標准GB 11643-1999 function idcard_verify_number($idcard_base){ if (strlen($idcard_base) != 17){ return false; } // 加權因子 $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); // 校驗碼對應值 $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; } // 將15位身份證升級到18位 function idcard_15to18($idcard){ if (strlen($idcard) != 15){ return false; }else{ // 如果身份證順序碼是996 997 998 999,這些是爲百歲以上老人的特殊編碼 if (array_search(substr($idcard, 12, 3), array('996', '997', '998', '999')) !== false){ $idcard = substr($idcard, 0, 6) . '18'. substr($idcard, 6, 9); }else{ $idcard = substr($idcard, 0, 6) . '19'. substr($idcard, 6, 9); } } $idcard = $idcard . idcard_verify_number($idcard); return $idcard; } // 18位身份證校驗碼有效性檢查 function idcard_checksum18($idcard){ if (strlen($idcard) != 18){ return false; } $idcard_base = substr($idcard, 0, 17); if (idcard_verify_number($idcard_base) != strtoupper(substr($idcard, 17, 1))){ return false; }else{ return true; } } ?> 其中的$idcard_base是指身份證中的本位碼,本位碼是18位身份證裏才有的,也就是18位身份證的前17位,最後一位稱爲校驗碼 一般在使用的時候不用直接調用idcard_verify_number(),平時的應用大多是使用後兩個函數 這些函數都沒有關心身份證字符串的格式問題,在調用前自行進行格式檢查
󰈣󰈤
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
王朝網路微信公眾號
微信掃碼關註本站公眾號 wangchaonetcn
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有