id_card_helper.dart 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. class IdCardHelper {
  2. static bool isNumeric(String str) {
  3. if (str.isEmpty) {
  4. return false;
  5. }
  6. return double.tryParse(str) != null;
  7. }
  8. static bool validateIDCard(String idCard) {
  9. // 校验身份证号码长度
  10. if (idCard.length != 18) {
  11. return false;
  12. }
  13. // 校验前17位是否为数字
  14. String idCard17 = idCard.substring(0, 17);
  15. if (!isNumeric(idCard17)) {
  16. return false;
  17. }
  18. // 校验最后一位校验码
  19. String checkCode = getCheckCode(idCard17);
  20. if (idCard[17].toUpperCase() != checkCode) {
  21. print("checkCode: $checkCode");
  22. return false;
  23. }
  24. return true;
  25. }
  26. static String getCheckCode(String idCard17) {
  27. List<int> coefficients = [
  28. 7,
  29. 9,
  30. 10,
  31. 5,
  32. 8,
  33. 4,
  34. 2,
  35. 1,
  36. 6,
  37. 3,
  38. 7,
  39. 9,
  40. 10,
  41. 5,
  42. 8,
  43. 4,
  44. 2
  45. ];
  46. List<String> checkCodes = [
  47. '1',
  48. '0',
  49. 'X',
  50. '9',
  51. '8',
  52. '7',
  53. '6',
  54. '5',
  55. '4',
  56. '3',
  57. '2'
  58. ];
  59. int sum = 0;
  60. for (int i = 0; i < idCard17.length; i++) {
  61. int digit = int.parse(idCard17[i]);
  62. sum += digit * coefficients[i];
  63. }
  64. int remainder = sum % 11;
  65. return checkCodes[remainder];
  66. }
  67. }