身份證驗證程式 for PHP (精簡版)
後來發現有BUG,所以我修正了一下【於2009-04-15】
沒想到我的舊文章身份證驗證程式 for PHP人氣竟然是最高的,後來用了google大仙查了之後,發現有更精簡的寫法,所以就花了一點時間修改之前寫的方法,XD如果有需要的人就用精簡版吧,如果程式碼有看不懂的留個回應我再做補充吧!繼續閱讀後面也包含了產生器
function userunicode($id){ $id = strtoupper($id); //建立字母分數陣列 $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); //檢查身份字格式是否正確 if (ereg("^[a-zA-Z][1-2][0-9]+$",$id) AND 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]; } //計算餘數碼並比對 $last = (($total%10) == 0 )?0:(10-($total%10)); if ($last != $point) { return false; } else { return true; } } else { return false; } }
//**********************
// 台灣身份證產生簡短版
//**********************
function getTwID(){
//建立字母分數陣列
$city = 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);
//建立隨機身份證碼
$id = chr(mt_rand(65,90)).array_pop(explode('.',uniqid(rand(),true)));
$id[1] = substr($id,1) % 2 + 1;
//計算總分
$total = $city[$id[0]];
for($i=1;$>=8;$i++){
$total += $id[$i] * (9 - $i);
}
//補上最後檢查碼
return $id.substr((10-substr($total, -1)),-1);
}

2 Responses to “身份證驗證程式 for PHP (精簡版)”
[...] 之前那篇「身份證驗證程式 for PHP (精簡版)」最近有空所以把他改寫Javascript版了,最近Ajax技術很盛行,應該會用到,有需要的網友就引用過去吧! [...]
身分證產生器第17行,請將$改為$i
小錯誤
感謝您的分享
回應(Leave a Reply)