網頁

2017年3月31日 星期五

php身份證字號驗證


由上圖身份證字號先來看一下身份證的驗證公式:
戶籍代表的字母:
A台北市 B台中市 C基隆市 D台南市 E高雄市 F台北縣 G宜蘭縣 H桃園市 I嘉義市 J新竹縣
K苗栗縣 L台中縣  M南投縣 N彰化縣 O新竹市 P雲林縣 Q嘉義縣 R台南縣 S高雄縣 T屏東縣
U花蓮縣 V台東縣  W金門縣 X澎湖縣 Y陽明山 Z連江縣
英文字母代表的數字:
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=32 X=30 Y=31 Z=33
性別代表的數字:
1 ==> 男性
2 ==> 女性
檢查步驟:
1、查出英文字所代表的數字,再將所查出的數字 "十位數+個位數x9"
例: 台北市=10 => 1 + 0x9 =1  台中市=11 => 1 + 1x9 =10
2、N2x8+N3x7+N4x6+N5x5+N6x4+N7x3+N8x2+N9+N10
將流水碼依序乘8765432,一個個乘,乘完要相加起來(別忘了先乘除後加減)
例: 123456789 => 1x8+2x7+3x6+4x5+5x4+6x3+7x2+8+9
3、將步驟1 和步驟2 的兩個數加起來除以10
例: 步驟1 台北計算結果 =1
步驟2 1x8+2x7+3x6+4x5+5x4+6x3+7x2+8+9 =129
除10後看看是否可以整除,如可以整除即為正確的身份證字號
如無法整除即是錯誤的身份證字號
(1+129)/10 = 13 => 可以整除,正確!
依照上面公式,小學生寫了一個簡單的函數,初學者可以參考看看,使用的都是一些簡單的指令:
調用函數方式:
id_card('身份證字號');
如:
id_card('A100020001');


其實上面的代碼中的 $alphabet 陣列值,你也可以直接把兩位數字加起的數據,放在陣列值的位置,如此就可省略掉一些程式碼,上面程式小學生是為了讓你更能理解步驟之程序,程式的代碼,其實可有很多種變化及精簡,等你更加有經驗後,請試著自己創作囉。
提示:
$alphabet =['A'=>'10','B'=>'11','C'=>'12','D'=>'13','E'=>'14',.....
可改成直接使用總和值
$alphabet =['A'=>'1','B'=>'10','C'=>'19','D'=>'28','E'=>'37',..........
然後索引取出的值就是英文字的加總
A =10  總和 1 + 0x9 = 1
B  =11  總和 1 + 1x9 = 10
C    =12  總和 1 + 2x9 = 19D  =13  總和 1 + 3x9 = 28
E    = 14 總和 1 + 4x9 = 37
寫法請自己修改看看囉 !小學生就不寫出代碼囉!


另外,網路上亦有其他作者有另外的函數供參考:
調用方式:
is_tw_id('身份證字號');
如:
is_tw_id('A100020001');
引用資料來源:https://scriptmarks.com/php身份證字號驗證/