排行榜

php二代身份证号验证的方法

本文阅读 1 分钟
首页 后端开发 正文
广告

/** 
    * 验证身份证号 
    * @param $vStr 
    * @return bool 
    */ 
   function isCreditNo($vStr) 
   { 
       $vCity = 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' 
       ); 
 
       if (!preg_match('/^([\d]{17}[xX\d]|[\d]{15})$/', $vStr)) return false; 
 
       if (!in_array(substr($vStr, 0, 2), $vCity)) return false; 
 
       $vStr = preg_replace('/[xX]$/i', 'a', $vStr); 
       $vLength = strlen($vStr); 
 
       if ($vLength == 18) 
       { 
           $vBirthday = substr($vStr, 6, 4) . '-' . substr($vStr, 10, 2) . '-' . substr($vStr, 12, 2); 
       } else { 
           $vBirthday = '19' . substr($vStr, 6, 2) . '-' . substr($vStr, 8, 2) . '-' . substr($vStr, 10, 2); 
       } 
 
       if (date('Y-m-d', strtotime($vBirthday)) != $vBirthday) return false; 
       if ($vLength == 18) 
       { 
           $vSum = 0; 
 
           for ($i = 17 ; $i >= 0 ; $i--) 
           { 
               $vSubStr = substr($vStr, 17 - $i, 1); 
               $vSum += (pow(2, $i) % 11) * (($vSubStr == 'a') ? 10 : intval($vSubStr , 11)); 
           } 
 
           if($vSum % 11 != 1) return false; 
       } 
 
       return true; 
   }


本文来自投稿,不代表本站立场,如若转载,请注明出处:https://www.unfit.cn/archives/48.html
ThinkPHP中各种搜索条件的使用、查询
« 上一篇 07-19
php对二维数组某个键排序
下一篇 » 07-19
广告

相关推荐