util.js 4.59 KB
   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  31
  32
  33
  34
  35
  36
  37
  38
  39
  40
  41
  42
  43
  44
  45
  46
  47
  48
  49
  50
  51
  52
  53
  54
  55
  56
  57
  58
  59
  60
  61
  62
  63
  64
  65
  66
  67
  68
  69
  70
  71
  72
  73
  74
  75
  76
  77
  78
  79
  80
  81
  82
  83
  84
  85
  86
  87
  88
  89
  90
  91
  92
  93
  94
  95
  96
  97
  98
  99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
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
}