zoukankan      html  css  js  c++  java
  • 新老身份证验证

    记录下自己记不住的 也不想记住的

     1    function isIdCard( $id )
     2     {
     3         $id = strtoupper($id);
     4         $regx = "/(^d{15}$)|(^d{17}([0-9]|X)$)/";
     5         $arr_split = array();
     6         if(!preg_match($regx, $id))
     7         {
     8             return FALSE;
     9         }
    10         if(15==strlen($id))                                 //检查15位的身份证号码
    11         {
    12             $regx = "/^(d{6})+(d{2})+(d{2})+(d{2})+(d{3})$/";
    13 
    14             @preg_match($regx, $id, $arr_split);
    15             //检查(某种角度上讲 15位身份证号码肯定是19年开头的)生日日期是否正确
    16             $dtm_birth = "19".$arr_split[2] . '/' . $arr_split[3]. '/' .$arr_split[4];
    17             if(!strtotime($dtm_birth))
    18             {
    19                 return FALSE;
    20             } else {
    21                 return TRUE;
    22             }
    23         }
    24         else      //检查18位的身份证号码
    25         {
    26             $regx = "/^(d{6})+(d{4})+(d{2})+(d{2})+(d{3})([0-9]|X)$/";
    27             @preg_match($regx, $id, $arr_split);
    28             $dtm_birth = $arr_split[2] . '/' . $arr_split[3]. '/' .$arr_split[4];
    29             if(!strtotime($dtm_birth))                         //检查生日日期是否正确
    30             {
    31                 return FALSE;
    32             }
    33             else
    34             {
    35                 //检验18位身份证的校验码是否正确。
    36                 //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
    37                 $arr_int = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
    38                 $arr_ch = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
    39                 $sign = 0;
    40                 for ( $i = 0; $i < 17; $i++ )
    41                 {
    42                     $b = (int) $id{$i};
    43                     $w = $arr_int[$i];
    44                     $sign += $b * $w;
    45                 }
    46                 $n = $sign % 11;
    47                 $val_num = $arr_ch[$n];
    48                 if ($val_num != substr($id,17, 1))
    49                 {
    50                     return FALSE;
    51                 }
    52                 else
    53                 {
    54                     return TRUE;
    55                 }
    56             }
    57         }
    58 
    59     }
    作者地址:https://www.cnblogs.com/G921123/
    创作也有乐趣 知识分享 转载注明出处 相互理解 谢谢! WeChat:17321295203
  • 相关阅读:
    POJ 1611 The Suspects 并查集
    POJ A Simple Problem with Integers 线段树的成段更新
    POJ 2367 Genealogical tree 拓扑排序
    《大道至简》读后感
    周总结报告
    周学习进度总结
    周总结报告
    周总结报告
    周总结报告
    教室派评价
  • 原文地址:https://www.cnblogs.com/G921123/p/10155845.html
Copyright © 2011-2022 走看看