Structure of ID number
The ID number is a characteristic combination code, consisting of a 17-digit body code and a one-bit check code.
The order from left to right is: six-digit address code, eight-digit date of birth code, three-digit sequence code and one-digit check code.
Address code (first six digits)
Indicates the codeObjectThe administrative division code of the county (city, banner, district) where the permanent residence is located, in GB /T2260 regulations are implemented.
Date of birth code (seventh to fourteenth digit)
indicates the year, month, and day of the birth of the encoding object, and is implemented in accordance with the provisions of GB/T7408. The year, month, and No separators are used between Japanese codes.
Sequential code (15th to 17th digit)
indicates that the area identified by the same address code is programmed for people born in the same year, same month, and same day. Sequence numbers, odd numbers are assigned to men, and even numbers are assigned to women.
Check code (18th digit)
1. Seventeen-digit body code weighted summation formula
S= SUM( Ai * Wi), i=0, ... , 16, first sum the weights of the first 17 digits.
Ai: Represents the digital value of the ID number at the i-th position
Wi: Represents the weighting factor at the i-th position
Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
2. Calculation modulus
Y = mod(S, 11)
3. Get the corresponding check code through the module
Y: 0 1 2 3 4 5 6 7 8 9 10
Check code: 1 0 X 9 8 7 6 5 4 3 2
Example, today I will share a PHP function to verify whether the ID number is correct.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | function is_idcard( $id )
{
$id = strtoupper ( $id );
$regx = "/(^\d{15}$)|(^\d{17}([0-9]|X)$)/" ;
$arr_split = array ();
if (!preg_match( $regx , $id ))
{
return FALSE;
}
if (15== strlen ( $id ))
{
$regx = "/^(\d{6})+(\d{2})+(\d{2})+(\d{2})+(\d{3})$/" ;
@preg_match( $regx , $id , $arr_split );
$dtm_birth = "19" . $arr_split [2] . '/' . $arr_split [3]. '/' . $arr_split [4];
if (! strtotime ( $dtm_birth ))
{
return FALSE;
} else {
return TRUE;
}
}
else
{
$regx = "/^(\d{6})+(\d{4})+(\d{2})+(\d{2})+(\d{3})([0-9]|X)$/" ;
@preg_match( $regx , $id , $arr_split );
$dtm_birth = $arr_split [2] . '/' . $arr_split [3]. '/' . $arr_split [4];
if (! strtotime ( $dtm_birth ))
{
return FALSE;
}
else
{
$arr_int = array (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
$arr_ch = array ('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
$sign = 0;
for ( $i = 0; $i < 17; $i ++ )
{
$b = (int) $id { $i };
$w = $arr_int [ $i ];
$sign += $b * $w ;
}
$n = $sign % 11;
$val_num = $arr_ch [ $n ];
if ( $val_num != substr ( $id ,17, 1))
{
return FALSE;
}
else
{
return TRUE;
}
}
}
}
|
Copy after login
Calling the ID card verification function
$idc=is_idcard("ID card number");
if($idc){echo "correct";}else{echo "error";}
Example 2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | 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;
}
}
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 ;
}
function idcard_15to18( $idcard ){
if ( strlen ( $idcard )!=15){
return false;
} else {
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 ;
}
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;
}
}
|
Copy after login
The above is the detailed content of PHP verify whether the ID number is correct example code. For more information, please follow other related articles on the PHP Chinese website!