PHP检测身份证号码两个函数
检测身份证号码,最准确的肯定是通过国家的身份数据中心检测,想想也不知道,这个东西不是这么好弄的,所以下面介绍一个办法,通过前17位来检测,直接上例子了:
<?php $idCard = '12345678901234567' ; //身份证号码前17位 $wi = array (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); $ai = array ( '1' , '0' , 'X' , '9' , '8' , '7' , '6' , '5' , '4' , '3' , '2' ); $sigma = null; for ( $i = 0; $i < 17; $i ++) { $sigma += ((int) $idCard { $i }) * $wi [ $i ]; } echo "身份证号码:" . $idCard . $ai [( $sigma % 11)]; ?> //例2代码如下: function validation_filter_id_card( $id_card ) { if ( strlen ( $id_card ) == 18) { return idcard_checksum18( $id_card ); } elseif (( strlen ( $id_card ) == 15)) { $id_card = idcard_15to18( $id_card ); return idcard_checksum18( $id_card ); } else { return false; } } // 计算身份证校验码,根据国家标准GB 11643-1999 function idcard_verify_number( $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 ; } // 将15位身份证升级到18位 function idcard_15to18( $idcard ){ if ( strlen ( $idcard ) != 15){ return false; } else { // 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码 if ( array_search ( substr ( $idcard , 12, 3), array ( '996' , '997' , '998' , '999' )) !== false){ $idcard = substr ( $idcard , 0, 6) . '18' . substr ( $idcard , 6, 9); } else { $idcard = substr ( $idcard , 0, 6) . '19' . substr ( $idcard , 6, 9); } } $idcard = $idcard . idcard_verify_number( $idcard ); return $idcard ; } // 18位身份证校验码有效性检查 function idcard_checksum18( $idcard ){ if ( strlen ( $idcard ) != 18){ return false; } $idcard_base = substr ( $idcard , 0, 17); if (idcard_verify_number( $idcard_base ) != strtoupper ( substr ( $idcard , 17, 1))){ return false; } else { return true; } }查看更多关于PHP检测身份证号码两个函数 - php函数的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did30897