Home >Backend Development >PHP Tutorial >PHP ID number verification function example code
The ID card number is a characteristic combination code, which consists of a 17-digit body code and a one-digit 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
The code is as follows:
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; } }
The above is the detailed content of PHP ID number verification function example code. For more information, please follow other related articles on the PHP Chinese website!