看板 PHP 關於我們 聯絡資訊
※ 引述《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
alpe:字串直接當陣列, 好像是php 5.1 的事,所以舊的寫法都不會這樣 08/28 13:21
chaoms:樓上,到目前的php版本一直都可以喔,可以試試看 08/28 14:05
fri13:書要看新一點的歐 我遇過現在還在看php4的人XD 08/30 16:21
alpe:只是要警告, 當你遇到php版本不再5+ 得時候會error 08/31 14:01