ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

台湾地区身份证号码验证

2019-11-25 15:00:07  阅读:1611  来源: 互联网

标签:10 数字 号码 region 台湾地区 substr 通算值 身份证 yzm


/**
 * 验证台湾地区身份证号码
 * 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;
        }
    }
}

台湾地区身份证号码验证

 

标签:10,数字,号码,region,台湾地区,substr,通算值,身份证,yzm
来源: https://www.cnblogs.com/init-007/p/11927796.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有