由上圖身份證字號先來看一下身份證的驗證公式:
戶籍代表的字母:
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台北市 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
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 ==> 男性
2 ==> 女性
檢查步驟:
1、查出英文字所代表的數字,再將所查出的數字 "十位數+個位數x9"
例: 台北市=10 => 1 + 0x9 =1 台中市=11 => 1 + 1x9 =10
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
將流水碼依序乘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 => 可以整除,正確!
例: 步驟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
$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身份證字號驗證/