In the project, it is necessary to automatically obtain the date of birth and gender according to the ID number entered by the user. I searched some methods on the Internet to use in the project. Now make a record for later use.
card.js code, used to determine whether the ID number format is correct (mainly length and birth date):
//Judge the format of ID card function isIdCardNo(num) { var factorArr = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1); var parityBit = new Array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"); var varArray = new Array(); var lngProduct = 0; var intCheckDigit; var intStrLen = num.length; var idNumber = num; // initialize if ((intStrLen != 15) && (intStrLen != 18)) { return false; } // check and set value for (var i = 0; i < intStrLen; i++) { varArray[i] = idNumber.charAt(i); if ((varArray[i] < '0' || varArray[i] > '9') && (i != 17)) { return false; } else if (i < 17) { varArray[i] = varArray[i] * factorArr[i]; } } //Judge 18 bit length if (intStrLen == 18) { //check date var date8 = idNumber.substring(6, 14); if (isDate8(date8) == false) { return false; } // calculate the sum of the products for (var i = 0; i < 17; i++) { lngProduct = lngProduct + varArray[i]; } // calculate the check digit intCheckDigit = parityBit[lngProduct % 11]; // check last digit if (varArray[17] != intCheckDigit) { return false; } //Judge 18 bit length }else { //check date var date6 = idNumber.substring(6, 12); if (isDate6(date6) == false) { return false; } } return true; } //15 digit length to judge birthday function isDate6(sDate) { if (!/^[0-9]{6}$/.test(sDate)) { return false; } var year, month, day; year = sDate.substring(0, 4); month = sDate.substring(4, 6); if (year < 1700 || year > 2500) return false; if (month < 1 || month > 12) return false; return true; } //18 digit length to judge birthday function isDate8(sDate) { if (!/^[0-9]{8}$/.test(sDate)) { return false; } var year, month, day; year = sDate.substring(0, 4); month = sDate.substring(4, 6); day = sDate.substring(6, 8); var iaMonthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] if (year < 1700 || year > 2500) return false; if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) iaMonthDays[1] = 29; if (month < 1 || month > 12) return false; if (day < 1 || day > iaMonthDays[month - 1]) return false; return true; }
The method of getting birthday and gender based on date in js:
function getSexAndbirthday (IdCard) { var birthday = ""; var sexNo = ""; var sex = ""; if(IdCard.length === 15) { birthday = '19'+IdCard.substr(6,2)+'-'+IdCard.substr(8,2)+'-'+IdCard.substr(10,2); sexNo = IdCard.substring(14,15) } else if (IdCard.length === 18) { birthday = IdCard.substr(6,4)+'-'+IdCard.substr(10,2)+'-'+IdCard.substr(12,2); sexNo = IdCard.substring(16,17) } if (sexNo%2==0){ sex = 'FEMALE'; }else { sex = 'MALE'; } return {sex: sex, birthday: birthday}; }