/** * 验证台湾地区身份证号码 * 10位 * 英文 县市 / 地区 验证码(数字) 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;最后一位数字是检验码;其它是电脑系统给码。 三、身份证验证 最后一位数字是检验码,通过公式计算得到。计算公式如下: 通算值= 首字母对应的第一位验证码+ 首字母对应的第二位验证码 * 9 + 性别码 * 8 + 第二位数字 * 7 + 第三位数字 * 6 + 第四位数字 * 5 + 第五位数字 * 4 + 第六位数字 * 3 + 第七位数字 * 2 + 第八位数字 * 1 最后一位数 =10- 通算值的末尾数。 例如,A234567893,A对应的验证码是10,最后一位数是3。通算值= 1 + 0*9 + 2*8 + 3*7 + 4*6 + 5*5 + 6*4 + 7*3 + 8*2 + 9*1 = 157,通算值的末尾数是7。则10-7=3,与最后一位数(验证码)相同,身份证号码正确。反之,A234567890的最后一位是0,就不是有效字号。 */ function checkTWID($str) { if(!preg_match('/^[A-Za-z][12]\d{8}$/', $str)) { return false; } else { // 计算通算值 $yzmArr = [ 'A' => [ 'region' => '台北市', 'yzm' => 10 ], 'B' => [ 'region' => '台中市', 'yzm' => 11 ], 'C' => [ 'region' => '基隆市', 'yzm' => 12 ], 'D' => [ 'region' => '台南市', 'yzm' => 13 ], 'E' => [ 'region' => '高雄市', 'yzm' => 14 ], 'F' => [ 'region' => '台北县', 'yzm' => 15 ], 'G' => [ 'region' => '宜兰县', 'yzm' => 16 ], 'H' => [ 'region' => '桃园县', 'yzm' => 17 ], 'I' => [ 'region' => '嘉义市', 'yzm' => 34 ], 'J' => [ 'region' => '新竹县', 'yzm' => 18 ], 'K' => [ 'region' => '苗栗县', 'yzm' => 19 ], 'L' => [ 'region' => '台中县', 'yzm' => 20 ], 'M' => [ 'region' => '南投县', 'yzm' => 21 ], 'N' => [ 'region' => '彰化县', 'yzm' => 22 ], 'O' => [ 'region' => '新竹市', 'yzm' => 35 ], 'P' => [ 'region' => '云林县', 'yzm' => 23 ], 'Q' => [ 'region' => '嘉义县', 'yzm' => 24 ], 'R' => [ 'region' => '台南县', 'yzm' => 25 ], 'S' => [ 'region' => '高雄县', 'yzm' => 26 ], 'T' => [ 'region' => '屏东县', 'yzm' => 27 ], 'U' => [ 'region' => '花莲县', 'yzm' => 28 ], 'V' => [ 'region' => '台东县', 'yzm' => 29 ], 'W' => [ 'region' => '金门县', 'yzm' => 32 ], 'X' => [ 'region' => '澎湖县', 'yzm' => 30 ], 'Y' => [ 'region' => '阳明山管理局', 'yzm' => 31 ], 'Z' => [ 'region' => '连江县', 'yzm' => 33 ] ]; $yzm = $yzmArr[strtoupper(substr($str,0, 1))]['yzm']; $tongsuan = substr($yzm, 0, 1) + substr($yzm, 1, 1) * 9; for($i = 1;$i < 9;$i++) { $tongsuan += substr($str, $i, 1) * (9 - $i); } // 判断结果 if((10 - substr($tongsuan, -1, 1)) === intval(substr($str, 9, 1))) { return true; } else { return false; } } }
台湾地区身份证号码验证