const formatTime = date => {
const year = date.getFullYear()
const month = date.getMonth() + 1
const day = date.getDate()
const hour = date.getHours()
const minute = date.getMinutes()
const second = date.getSeconds()
return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}
const formatNumber = n => {
n = n.toString()
return n[1] ? n : '0' + n
}
const GetAge = identityCard => {
var len = (identityCard + "").length;
if (len == 0) {
return 0;
} else {
if ((len != 15) && (len != 18))//身份证号码只能为15位或18位其它不合法
{
return 0;
}
}
var strBirthday = "";
if (len == 18)//处理18位的身份证号码从号码中得到生日和性别代码
{
strBirthday = identityCard.substr(6, 4) + "/" + identityCard.substr(10, 2) + "/" + identityCard.substr(12, 2);
}
if (len == 15) {
strBirthday = "19" + identityCard.substr(6, 2) + "/" + identityCard.substr(8, 2) + "/" + identityCard.substr(10, 2);
}
//时间字符串里,必须是“/”
var birthDate = new Date(strBirthday);
var nowDateTime = new Date();
var age = nowDateTime.getFullYear() - birthDate.getFullYear();
//再考虑月、天的因素;.getMonth()获取的是从0开始的,这里进行比较,不需要加1
if (nowDateTime.getMonth() < birthDate.getMonth() || (nowDateTime.getMonth() == birthDate.getMonth() && nowDateTime.getDate() < birthDate.getDate())) {
age--;
}
return age;
}
/**
* 检查身份证合法
* @param str_idCard sex为human man
* @returns {boolean}
*/
function checkIdCard(str_idCard, sex) {
str_idCard = str_idCard || String(this);
var check = function () {
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 = str_idCard.length;
var idNumber = str_idCard;
// 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];
}
}
if (intStrLen == 18) {
var date8 = idNumber.substring(6, 14);
if (!/^[0-9]{8}$/.test(date8)) {
return false;
}
var year, month, day;
year = date8.substring(0, 4);
month = date8.substring(4, 6);
day = date8.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;
// calculate the sum of the products
for (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;
}
}
//length is 15
else {
var date6 = idNumber.substring(6, 12);
if (!/^[0-9]{6}$/.test(date6)) {
return false;
}
var month, day, year;
year = date6.substring(0, 2);
month = date6.substring(2, 4);
day = date6.substring(4, 6);
if (!/^\d{2}$/.test(year)) return false;
if (month < 1 || month > 12) return false;
if (day < 1 || day > 31) return false;
}
return true;
}
if (str_idCard && check(str_idCard)) {
if (undefined != sex) {
var sexStr = undefined, tmp = 0;
if (15 == str_idCard.length) {
tmp = str_idCard.substring(str_idCard.length - 1, str_idCard.length);
} else if (18 == str_idCard.length) {
tmp = str_idCard.substr(str_idCard.length - 2, 1);
}
if (0 == tmp % 2) {
sexStr = 'woman';
} else {
sexStr = 'man';
}
if (sex != sexStr) return false;
}
return true;
}
return false;
}
function getBirthDayFromIdCard(idCard,unit){
var year = idCard.substring(6, 10)
var month = idCard.substring(10, 12)
var day = idCard.substring(12, 14)
return year + (unit || '年') + month + (unit || '月') + day + (unit || '日')
}
module.exports = {
formatTime: formatTime,
GetAge: GetAge,
checkIdCard: checkIdCard,
getBirthDayFromIdCard: getBirthDayFromIdCard
}