Guest User

Untitled

a guest
May 25th, 2018
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.08 KB | None | 0 0
  1. //验证身份证是否有效
  2. public static function verifyIdentityCard($identityCard)
  3. {
  4. $len = strlen($identityCard);
  5. if ($len != 18) {
  6. return false;
  7. }
  8. $identityCard = strtoupper($identityCard);//兼容小写x
  9. $identityCardArr = str_split($identityCard, 1);
  10. //公式 ∑(a[i]*W[i]) mod 11 ( i = 18,17,16 ... 2 ) 最后一位是校验位 1
  11. //$weight[i]-----表示第 i 位上的权值 W[i] = 2^(i-1) mod 11
  12. $weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
  13. $code = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];
  14. $sum = 0;
  15. for ($i = 0; $i < 17; $i++) {
  16. $sum += $identityCardArr[$i] * $weight[$i];
  17. }
  18. $r = $sum % 11;
  19. $res = $code[$r];
  20. //echo "校验位是: ".$res;
  21. //根据下表找出 R 对应的校验码即为要求身份证号码的校验码C。
  22. //R 0 1 2 3 4 5 6 7 8 9 10
  23. //C 1 0 X 9 8 7 6 5 4 3 2
  24. if ($res == $identityCardArr[17]) {
  25. return true;
  26. } else {
  27. return false;
  28. }
  29. }
Add Comment
Please, Sign In to add comment