身分證驗證程式 for PHP
最近需要寫到身份證字號驗證,參考相關網站介紹的規則,所試著也以PHP來寫看看這個函式。
注意:站長關於此篇文章有新發表,你應該轉閱此文章【身份證驗證程式 for PHP (精簡版)】
//**************
// 身份證檢查
//**************
function checkNick($id){
//建立字母分數陣列
$head = array('A'=>1,'I'=>39,'O'=>48,'B'=>10,'C'=>19,'D'=>28,
'E'=>37,'F'=>46,'G'=>55,'H'=>64,'J'=>73,'K'=>82,
'L'=>2,'M'=>11,'N'=>20,'P'=>29,'Q'=>38,'R'=>47,
'S'=>56,'T'=>65,'U'=>74,'V'=>83,'W'=>21,'X'=>3,
'Y'=>12,'Z'=>30);
//建立加權基數陣列
$multiply = array(8,7,6,5,4,3,2,1);
//檢查身份字格式是否正確
if (ereg("^[a-zA-Z][1-2][0-9]+$",$id) && strlen($id) == 10){
//切開字串
$len = strlen($id);
for($i=0; $i<$len; $i++){
$stringArray[$i] = substr($id,$i,1);
}
//取得字母分數
$total = $headPoint[array_shift($stringArray)];
//取得比對碼
$point = array_pop($stringArray);
//取得數字分數
$len = count($stringArray)
for($j=0; $j<$len; $j++){
$total += $stringArray[$j]*$multiply[$j];
}
//檢查比對碼
if (($total%10 == 0 )?0:10-$total%10 != $point) {
return false;
} else {
return true;
}
} else {
return false;
}
}
//***************
// 身份證產生
//***************
function getRandID(){
//建立字母分數陣列
$headPoint = array('A'=>1,'I'=>39,'O'=>48,'B'=>10,'C'=>19,'D'=>28,
'E'=>37,'F'=>46,'G'=>55,'H'=>64,'J'=>73,'K'=>82,
'L'=>2,'M'=>11,'N'=>20,'P'=>29,'Q'=>38,'R'=>47,
'S'=>56,'T'=>65,'U'=>74,'V'=>83,'W'=>21,'X'=>3,
'Y'=>12,'Z'=>30);
//建立加權基數陣列
$multiply = array(8,7,6,5,4,3,2,1);
//取得隨機數字
$number = mt_rand(1,2);
for($i=0 ;$i<7 ;$i++){
$number .= mt_rand(0,9);
}
//切開字串
$len = strlen($number);
for($i=0;$i<$len;$i++){
$stringArray[$i] = substr($number,$i,1);
}
//取得隨機字母分數
$index = chr(mt_rand(65,90));
$total = $headPoint[$index];
//取得數字分數
$len = count($stringArray);
for($j=0; $j<$len; $j++){
$total += $stringArray[$j]*$multiply[$j];
}
//取得檢查比對碼
if ($total%10 == 0 ) {
return $index . $number . 0;
} else {
return $index.$number.(10 - $total % 10);
}
}

2 Responses to “身分證驗證程式 for PHP”
[...] 沒想到我的舊文章身份證驗證程式 for PHP人氣竟然是最高的,後來用了google大仙查了之後,發現有更精簡的寫法,所以就花了一點時間修改之前寫的方法,XD如果有需要的人就用精簡版吧,如果程式碼有看不懂的留個回應我再做補充吧!繼續閱讀後面也包含了產生器 [...]
感謝你提供的程式碼 對我非常有幫助 我已經改寫成flash cs3版本 有興趣的朋友可以mail給我!
回應(Leave a Reply)