Re: [請益] 請教台灣身份證演算法
※ 引述《mydoc (mydoc)》之銘言:
: $j =
: array(A=>10,B=>11,C=>12,D=>13,E=>14,F=>15,G=>16,H=>17,I=>34,J=>18,K=>19,
: L=>20,M=>21,N=>22,O=>35,P=>23,Q=>24,R=>25,S=>26,T=>27,U=>28,V=>29,W=>30,
: X=>31,Y=>32,Z=>33);
: $str="A123456789";
: $i = str_split($str);
: $i[0]=$j[$i[0]];
: $i = "$i[0]$i[1]$i[2]$i[3]$i[4]$i[5]$i[6]$i[7]$i[8]$i[9]";
: $i = str_split($i);
: $j =
: ($i[0]*1)+($i[1]*9)+($i[2]*8)+($i[3]*7)+($i[4]*6)+($i[5]*5)+
: ($i[6]*4)+($i[7]*3)+($i[8]*2)+($i[9]*1);
: $j = $j%10;
: $j = 10-$j ;
: print_r($j);
: 台灣身份證算法大家應該都知道..但我不會寫演算法
: 只能用很笨很暴力的方法把字串切開再合起來再切開再算
: 請問還有更好的算法嗎?另外對於中低手比較推薦哪本PHP的書藉?
字串也可直接當陣列使用呀
// 等同你的$i[0];
$one = strval(10 + strpos("ABCDEFGHJKLMNPQRSTUVXYWZIO", $str[0]));
// 等同你的$j
$no1 = $one[1] * 9 + $one[0];
for ($i=8; $i>=1; $i--) {
$no2 += $str[9-$i] * $i;
}
$no3 = $no1 + $no2 + $str[9];
// 驗證 ($no3 % 10 == 0);
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 115.80.143.25
→
08/28 13:21, , 1F
08/28 13:21, 1F
→
08/28 14:05, , 2F
08/28 14:05, 2F
→
08/30 16:21, , 3F
08/30 16:21, 3F
推
08/31 14:01, , 4F
08/31 14:01, 4F
討論串 (同標題文章)
PHP 近期熱門文章
PTT數位生活區 即時熱門文章