1. 程式人生 > >驗證shenfenzheng合法性

驗證shenfenzheng合法性

驗證shenfenzheng合法性

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;
    }


本文出自 “素顏” 博客,請務必保留此出處http://suyanzhu.blog.51cto.com/8050189/1939076

驗證shenfenzheng合法性