验证shenfenzheng合法性

发布时间:2020-06-19 13:39:36 作者:素颜猪
来源:网络 阅读:376

1.实现代码如下

/**
     * 验证合法性
     */
    function checkIdCard($idcard){
        $City = array(11=>"北京",
        	12=>"天津",
        	13=>"河北",
        	14=>"山西",
        	15=>"内蒙古",
        	21=>"辽宁",
        	22=>"吉林",
        	23=>"黑龙江",
        	31=>"上海",
        	32=>"江苏",
        	33=>"浙江",
        	34=>"安徽",
        	35=>"福建",
        	36=>"江西",
        	37=>"山东",
        	41=>"河南",
        	42=>"湖北",
        	43=>"湖南",
        	44=>"广东",
        	45=>"广西",
        	46=>"海南",
        	50=>"重庆",
        	51=>"四川",
        	52=>"贵州",
        	53=>"云南",
        	54=>"西藏",
        	61=>"陕西",
        	62=>"甘肃",
        	63=>"青海",
        	64=>"宁夏",
        	65=>"新疆",
        	71=>"台湾",
        	81=>"香港",
        	82=>"澳门",
        	91=>"国外");
        $iSum = 0;
        $idCardLength = strlen($idcard);
        //长度验证
        if(!preg_match('/^\d{17}(\d|x)$/i',$idcard) and !preg_match('/^\d{15}$/i',$idcard)){
              return false;
        }
        //地区验证
        if(!array_key_exists(intval(substr($idcard,0,2)),$City)){
             return false;
        }
        // 15位验证生日,转换为18位
        if ($idCardLength == 15){
              $sBirthday = '19'.substr($idcard,6,2).'-'.substr($idcard,8,2).'-'.substr($idcard,10,2);
              $d = new DateTime($sBirthday);
              $dd = $d->format('Y-m-d');
              if($sBirthday != $dd){
                  return false;
              }
              $idcard = substr($idcard,0,6)."19".substr($idcard,6,9);//15to18
              $Bit18 = getVerifyBit($idcard);//算出第18位校验码
              $idcard = $idcard.$Bit18;
        }
        // 判断是否大于2078年,小于1900年
        $year = substr($idcard,6,4);
        if ($year<1900 || $year>2078 ){
            return false;
        }
        //18位处理
        $sBirthday = substr($idcard,6,4).'-'.substr($idcard,10,2).'-'.substr($idcard,12,2);
        $d = new DateTime($sBirthday);
        $dd = $d->format('Y-m-d');
        if($sBirthday != $dd){
            return false;
        }

        //编码规范验证
        $idcard_base = substr($idcard,0,17);
        if(strtoupper(substr($idcard,17,1)) != $this->getVerifyBit($idcard_base)){
             return false;
        }

        return $idcard;
    }

    // 计算校验码,根据国家标准GB 11643-1999
    function getVerifyBit($idcard_base){
        if(strlen($idcard_base) != 17){
            return false;
        }
        //加权因子
        $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
        //校验码对应值
        $verify_number_list = array('1', '0', 'X', '9', '8', '7', '6', '5', '4','3', '2');
        $checksum = 0;
        for ($i = 0; $i < strlen($idcard_base); $i++){
            $checksum += substr($idcard_base, $i, 1) * $factor[$i];
        }
        $mod = $checksum % 11;
        $verify_number = $verify_number_list[$mod];
        
        return $verify_number;
    }

验证shenfenzheng合法性

推荐阅读:
  1. 验证toml配置文件合法性
  2. JAVA实现身份证合法性验证代码

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

验证 合法性 shenfenzheng

上一篇:Prometheus监控 Redis , redis-cli_exporter

下一篇:QOS原理及配置案例

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》