Re: [請益] 請教台灣身份證演算法

看板PHP作者 (小企鵝)時間12年前 (2013/08/28 08:57), 編輯推噓1(103)
留言4則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《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
字串直接當陣列, 好像是php 5.1 的事,所以舊的寫法都不會這樣
08/28 13:21, 1F

08/28 14:05, , 2F
樓上,到目前的php版本一直都可以喔,可以試試看
08/28 14:05, 2F

08/30 16:21, , 3F
書要看新一點的歐 我遇過現在還在看php4的人XD
08/30 16:21, 3F

08/31 14:01, , 4F
只是要警告, 當你遇到php版本不再5+ 得時候會error
08/31 14:01, 4F
文章代碼(AID): #1I7KhU0Y (PHP)
討論串 (同標題文章)
文章代碼(AID): #1I7KhU0Y (PHP)