ホームページ  >  記事  >  バックエンド開発  >  IDカードが合法かどうかを検証するPHP関数

IDカードが合法かどうかを検証するPHP関数

WBOY
WBOYオリジナル
2016-07-25 08:42:281093ブラウズ
それは合法ですか、PHP
  1. /**
  2. * ID カード
  3. *
  4. * @param string $id
  5. * @return boolean
  6. */
  7. function is_idcard( $id )
  8. {
  9. $id = strtoupper($id);
  10. $regx = "/(^d{15}$)|(^d{ 17}([0-9]|X)$)/";
  11. $arr_split = array();
  12. if(!preg_match($regx, $id))
  13. {
  14. return FALSE;
  15. }
  16. if(15= =strlen($id)) //15 桁をチェック
  17. {
  18. $regx = "/^(d{6})+(d{2})+(d{2})+(d{2})+( d{3})$/";
  19. @preg_match($regx, $id, $arr_split);
  20. //誕生日が正しいか確認します
  21. $dtm_birth = "19".$arr_split[2] . '/ ' . $arr_split[3]. '/' .$arr_split[4];
  22. if(!strtotime($dtm_birth))
  23. {
  24. return FALSE;
  25. } else {
  26. return TRUE;
  27. }
  28. }
  29. else // 18 ビットをチェック
  30. {
  31. $regx = "/^(d{6})+(d{4})+(d{2})+(d{2})+(d{3})([0- 9] | ;
  32. if(!strtotime($dtm_birth)) //誕生日が正しいか確認
  33. {
  34. return FALSE;
  35. }
  36. else
  37. {
  38. // 18桁のIDカードのチェックコードか確認正しい。
  39. //チェック ディジットは ISO 7064:1983.MOD 11-2 に従って生成されます。X は数値 10 と見なされます。
  40. $arr_int = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
  41. $arr_ch = array('1' 、'0'、'X'、'9'、'8'、'7'、'6'、'5'、'4'、'3'、'2');
  42. $sign = 0;
  43. for ( $i = 0; $i {
  44. $b = (int) $id{$i};
  45. $w = $arr_int[$i];
  46. $sign += $b * $w;
  47. }
  48. $n = $sign % 11;
  49. $val_num = $arr_ch[$n];
  50. if ($val_num != substr($id,17, 1))
  51. {
  52. return FALSE;
  53. }
  54. else
  55. {
  56. return TRUE;
  57. }
  58. }
  59. }
  60. }
コードをコピー

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。