檢測大陸身份證字號 for PHP
PHP 版本的檢測大陸身份證字號
<?php
$id = trim($id);
//長度檢查
$string_length = strlen($id);
if ( $string_length != 18) {
return false;
}
//數字檢查
//前17碼必須為數字
for ($i = 0; $i < $string_length - 1; $i++) {
if ( ! is_numeric($id[$i]) ) {
return false;
}
}
//生日碼檢核
$date = substr( $id , 6 ,8 );
$date = strtotime( $date );
if ( ! $date ) return false;
//取得校驗碼
$factors = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); ////加權因子
$nValue = 0;
for ($i = 0; $i < 17; $i++) {
$nValue = $nValue + ($factors[$i] * $id[$i]);
}
$nValue %= 11;
$verify_ref = array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2");
$last_verify_code = $verify_ref[$nValue];
return ( $last_verify_code == $id[17] );