- 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;
- }
- }
- // Calculate the ID card verification code based on the national standard GB 11643-1999
- Function idcard_verify_number ($ idcard_base ){
- If (strlen ($ idcard_base )! = 17 ){
- Return false;
- }
- // Weighting factor
- $ Factor = array (, 2 );
- // Check code value
- $ Verify_number_list = array ('1', '0', 'X', '9', '8', '7', '6', '5 ', '4', '3', '2 ');
- $ Checksum = 0;
- For ($ I = 0; $ I $ Checksum + = substr ($ idcard_base, $ I, 1) * $ factor [$ I];
- }
- $ Mod = $ checksum % 11;
- $ Verify_number = $ verify_number_list [$ mod];
- Return $ verify_number;
- }
- // Upgrade the 15-digit ID card to 18-digit
- Function idcard_15to18 ($ idcard ){
- If (strlen ($ idcard )! = 15 ){
- Return false;
- } Else {
- // If the ID card sequence code is 996 997 998 999, these are special codes for elderly people over years old
- If (array_search (substr ($ idcard, 996), array ('20140901', '20160901', '20160301 '))! = False ){
- $ Idcard = substr ($ idcard,). '18'. substr ($ idcard, 6, 9 );
- } Else {
- $ Idcard = substr ($ idcard,). '19'. substr ($ idcard, 6, 9 );
- }
- }
- $ Idcard = $ idcard. idcard_verify_number ($ idcard );
- Return $ idcard;
- }
- // Check the validity of the 18-digit ID card verification code
- 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;
- }
- }
Call method:
- Validation_filter_id_card ('ID card number ');
|