Js 二代身份证验证

来源:互联网 发布:前端性能优化 编辑:程序博客网 时间:2024/04/28 16:01
window.idcard = (function(){/** * 根据提供的二代身份证号码获取其获取省份编码 * @param {String} number 身份证号 */var getProvinceCode = function(number){return number.substring(0, 2);};/** * 根据提供的二代身份证号码获取其获取直辖市编码 * @param {String} number 身份证号 */var getCityCode = function(number){return number.substring(2, 4);};/** * 根据提供的二代身份证号码获取其获取区县编码 * @param {String} number 身份证号 */var getDistrictCode = function(number){return number.substring(4, 6);};/** * 根据提供的二代身份证号码获取其获取出生日期 * @param {String} number 身份证号 */var getBirthday = function(number){return number.substring(6, 14);};/** * 根据提供的二代身份证号码获取其获取派出所代码 * @param {String} number 身份证号 */var getPoliceCode = function(number){return number.substring(14, 16);};/** * 根据提供的二代身份证号码获取其获取性别代码 * @param {String} number 身份证号 */var getSexCode = function(number){return number.substring(16, 17);};/** * 根据提供的二代身份证号码获取其获取校验码 * @param {String} number 身份证号 */var getCheckCode = function(number){return number.substring(17, 18);};/** * 判断提供的二代身份证号码中的省份是否合法 * @param {String} number 身份证号 */var isProvinceCodeValid = (function(){var map = {11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古", 21: "辽宁", 22: "吉林", 23: "黑龙江 ",31: "上海", 32: "江苏", 33: "浙江", 34: "安徽", 35: "福建", 36: "江西", 37: "山东",41: "河南", 42: "湖北 ", 43: "湖南", 44: "广东", 45: "广西", 46: "海南",50: "重庆", 51: "四川", 52: "贵州", 53: "云南", 54: "西藏 ",61: "陕西", 62: "甘肃", 63: "青海", 64: "宁夏", 65: "新疆",71: "台湾",81: "香港", 82: "澳门",91: "国外"};return function(number){var provinceCode = getProvinceCode(number);return map.hasOwnProperty(provinceCode);};})();/** * 判断提供的二代身份证号码中的校验码是否合法 * @param {String} number 身份证号 */var isCheckCodeValid = function(number){var wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];var ai = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];var sum = 0;for(var i = 0; i < 17; i++)sum += parseInt(number.substring(i, i + 1)) * wi[i];var expectedCheckCodeIndex = sum % 11;return ai[expectedCheckCodeIndex] == getCheckCode(number);};/** * 判断提供的二代身份证号码中的出生日期是否合法 * @param {String} number 身份证号 */var isBirthdayValid = function(number){var birthday = getBirthday(number);var year = birthday.substring(0, 4),month = birthday.substring(4, 6),date = birthday.substring(6, 8);var timestamp = Date.parse(year + "-" + month + "-" + date);var d = new Date(timestamp);return (parseInt(year) == d.getFullYear()) &&(parseInt(month) == (d.getMonth() + 1)) &&(parseInt(date) == d.getDate());};/** * 判断给定的身份证号合法(仅限二代身份证) * @param {String} number 身份证号 */var isNumberValid = function(number){return isProvinceCodeValid(number) &&isBirthdayValid(number) &&isCheckCodeValid(number);};var obj = {getProvinceCode: getProvinceCode,getCityCode: getCityCode,getDistrictCode: getDistrictCode,getBirthday: getBirthday,getPoliceCode: getPoliceCode,getSexCode: getSexCode,getCheckCode: getCheckCode,isProvinceCodeValid: isProvinceCodeValid,isCheckCodeValid: isCheckCodeValid,isBirthdayValid: isBirthdayValid,isNumberValid: isNumberValid};Object.freeze && Object.freeze(obj);return obj;})();
0 0