首页 > 语言 > PHP > 正文

PHP检测身份证号码两个函数

2024-09-04 11:48:31
字体:大 中 小
来源:转载
供稿:网友

检测身份证号码,最准确的肯定是通过国家的身份数据中心检测,想想也不知道,这个东西不是这么好弄的,所以下面介绍一个办法,通过前17位来检测,直接上例子了:

  1. <?php 
  2. $idCard  = '12345678901234567';//身份证号码前17位 
  3. $wi = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); 
  4. $ai = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); 
  5. $sigma = null; 
  6. for ($i = 0; $i < 17; $i++) { 
  7.  $sigma += ((int) $idCard{$i}) * $wi[$i]; 
  8. } 
  9. echo "身份证号码:".$idCard.$ai[($sigma % 11)]; 
  10. ?> 
  11. //例2代码如下: 
  12. function validation_filter_id_card($id_card)  
  13. {  
  14. if(strlen($id_card) == 18)  
  15. {  
  16. return idcard_checksum18($id_card);  
  17. }  
  18. elseif((strlen($id_card) == 15))  
  19. {  
  20. $id_card = idcard_15to18($id_card);  
  21. return idcard_checksum18($id_card);  
  22. }  
  23. else  
  24. {  
  25. return false;  
  26. }  
  27. }  
  28. // 计算身份证校验码,根据国家标准GB 11643-1999  
  29. function idcard_verify_number($idcard_base)  
  30. {  
  31. if(strlen($idcard_base) != 17)  
  32. {  
  33. return false;  
  34. }  
  35. //加权因子  
  36. $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);  
  37. //校验码对应值  
  38. $verify_number_list = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');  
  39. $checksum = 0;  
  40. for ($i = 0; $i < strlen($idcard_base); $i++)  
  41. {  
  42. $checksum += substr($idcard_base, $i, 1) * $factor[$i];  
  43. }  
  44. $mod = $checksum % 11;  
  45. $verify_number = $verify_number_list[$mod];  
  46. return $verify_number;  
  47. }  
  48. // 将15位身份证升级到18位  
  49. function idcard_15to18($idcard){  
  50. if (strlen($idcard) != 15){  
  51. return false;  
  52. }else{  
  53. // 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码  
  54. if (array_search(substr($idcard, 12, 3), array('996', '997', '998', '999')) !== false){  
  55. $idcard = substr($idcard, 0, 6) . '18'. substr($idcard, 6, 9);  
  56. }else{  
  57. $idcard = substr($idcard, 0, 6) . '19'. substr($idcard, 6, 9);  
  58. }  
  59. }  
  60. $idcard = $idcard . idcard_verify_number($idcard);  
  61. return $idcard;  
  62. }  
  63. // 18位身份证校验码有效性检查  
  64. function idcard_checksum18($idcard){  
  65. if (strlen($idcard) != 18){ return false; }  
  66. $idcard_base = substr($idcard, 0, 17);  
  67. if (idcard_verify_number($idcard_base) != strtoupper(substr($idcard, 17, 1))){  
  68. return false;  
  69. }else{  
  70. return true;  
  71. }  
  72. } 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表