作者chaoms (小企鹅)
看板PHP
标题Re: [请益] 请教台湾身份证演算法
时间Wed Aug 28 08:56:58 2013
※ 引述《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
1F:→ alpe:字串直接当阵列, 好像是php 5.1 的事,所以旧的写法都不会这样 08/28 13:21
2F:→ chaoms:楼上,到目前的php版本一直都可以喔,可以试试看 08/28 14:05
3F:→ fri13:书要看新一点的欧 我遇过现在还在看php4的人XD 08/30 16:21
4F:推 alpe:只是要警告, 当你遇到php版本不再5+ 得时候会error 08/31 14:01