1. function recard(value){
    2. var aCity = {
    3. 11: "北京",
    4. 12: "天津",
    5. 13: "河北",
    6. 14: "山西",
    7. 15: "内蒙古",
    8. 21: "辽宁",
    9. 22: "吉林",
    10. 23: "黑龙江 ",
    11. 31: "上海",
    12. 32: "江苏",
    13. 33: "浙江",
    14. 34: "安徽",
    15. 35: "福建",
    16. 36: "江西",
    17. 37: "山东",
    18. 41: "河南",
    19. 42: "湖北 ",
    20. 43: "湖南",
    21. 44: "广东",
    22. 45: "广西",
    23. 46: "海南",
    24. 50: "重庆",
    25. 51: "四川",
    26. 52: "贵州",
    27. 53: "云南",
    28. 54: "西藏 ",
    29. 61: "陕西",
    30. 62: "甘肃",
    31. 63: "青海",
    32. 64: "宁夏",
    33. 65: "新疆",
    34. 71: "台湾",
    35. 81: "香港",
    36. 82: "澳门",
    37. 91: "国外 "
    38. }
    39. var num = value.toUpperCase();
    40. if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))) {
    41. // alert('身份证位数格式错误!');
    42. return false;
    43. }
    44. if (aCity[parseInt(num.substr(0, 2))] == null){
    45. // alert('身份证格式错误!');
    46. return false;
    47. }
    48. var len, re;
    49. len = num.length;
    50. if (len == 15) {
    51. re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
    52. var arrSplit = num.match(re);
    53. var dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);
    54. var bGoodDay;
    55. bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(
    56. arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
    57. if (!bGoodDay) {
    58. // alert('身份证日期格式错误');
    59. return false;
    60. } else {
    61. var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
    62. var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
    63. var nTemp = 0,
    64. i;
    65. num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6);
    66. for (i = 0; i < 14; i++) {
    67. nTemp += num.substr(i, 1) * arrInt[i];
    68. }
    69. num += arrCh[nTemp % 11];
    70. return true;
    71. }
    72. }
    73. if (len == 18) {
    74. re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
    75. var arrSplit = num.match(re);
    76. var dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]);
    77. var bGoodDay;
    78. bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) ==
    79. Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
    80. if (!bGoodDay) {
    81. // alert('身份证日期格式错误');
    82. return false;
    83. } else {
    84. var valnum;
    85. var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
    86. var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
    87. var nTemp = 0,
    88. i;
    89. for (i = 0; i < 17; i++) {
    90. nTemp += num.substr(i, 1) * arrInt[i];
    91. }
    92. valnum = arrCh[nTemp % 11];
    93. if (valnum != num.substr(17, 1)) {
    94. // alert('身份证格式错误!');
    95. return false;
    96. }
    97. return true;
    98. }
    99. }
    100. }