jquery obtains gender and birthday through ID number

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};
        }

Posted by ArmyNation.Net on Fri, 08 Nov 2019 13:45:31 -0800