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

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