/*取日期多少天后的日期*/
function getDate(date, changeDay) {var year = date.getFullYear() // 年var month = date.getMonth() // 月var day = date.getDate();return dateFormat('YYYY-mm-dd', new Date(year, month, day + changeDay))
}
function getMonth(date, changeMonth) {var year = date.getFullYear() // 年var month = date.getMonth() // 月var day = date.getDate();return dateFormat('YYYY-mm-dd', new Date(year, month + changeMonth, day))
}
/*根据日期计算年龄*/
function calcAge(birthday,endDate){var reg = /\d{4}-\d{2}-\d{2}/;var age = '';if(birthday && endDate && reg.test(birthday) && reg.test(endDate)){//日期相差的月份var month = (endDate.substr(0,4) * 12 + Number(endDate.substr(5,2))) - (birthday.substr(0,4) * 12 + Number(birthday.substr(5,2)));//月份相同,结束日期天比出生日期天早,不满足月if(month % 12 === 0 && birthday.substr(8,2) > endDate.substr(8,2)){month -= 1;}//不是12月的倍数,结束日期比出生日期早,不满足月var age_m = '';age_m = month % 12;if(month % 12 > 0 && birthday.substr(8,2) > endDate.substr(8,2)){age_m -= 1;}             age = Math.floor(month / 12) +'周岁' + (age_m > 0 ? age_m + '月' :'')}if(!age){age = '参数不正确'}return age;
}//日期格式化
//自己实现一个padStart(),实现给字符串‘hello’前补0,考虑性能。
String.prototype.zpadStart = function (targetLength, padString) {var string = this;while (string.length < targetLength) {string = padString + string}return string
}//格式化时间 dateFormat("YYYY-mm-dd HH:MM", new Date()) date为时间对象,new Date()传入时间戳时需要为数字类型
function dateFormat(fmt, date) {var ret;var opt = {"Y+": date.getFullYear().toString(),        // 年"m+": (date.getMonth() + 1).toString(),     // 月"d+": date.getDate().toString(),            // 日"H+": date.getHours().toString(),           // 时"M+": date.getMinutes().toString(),         // 分"S+": date.getSeconds().toString()          // 秒// 有其他格式化字符需求可以继续添加,必须转化成字符串};for (var k in opt) {ret = new RegExp("(" + k + ")").exec(fmt);if (ret) {//fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].zpadStart(ret[1].length, "0")))//兼容ES5写法,格式化显示为1位以上时补0};};return fmt;
}
//判断字符串是否格式正确及日期合法性
function isDate(str) {if(!str)return false;var result = str.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);if (result == null){return false;}var d = new Date(result[1], result[3] - 1, result[4]);return (d.getFullYear() == result[1] && d.getMonth() + 1 == result[3] && d.getDate() == result[4]);
}//判断是否是闰年
function isLeapYear(year) { if ((year % 4 == 0 && year % 100 != 0) || year % 100 == 0) {return true;} else {return false;}
}//获取指定月份的天数
function getDayByMonth(year, month) { //1  2  3  4  5  6  7  8  9 10 11 12 var days = new Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);if (!isLeapYear(year)) { //平年28天days[1] = 28;}return days[month];
}//比较两个日期大小 参数格式2019-07-01 时间1 大于等于 时间2 则返回1
function dateCompare(date1, date2) {if (!date1 || !date2) {return 0;}date1 = $.trim(date1).replace(/\-/gi, "/");//iOS不支持-的日期格式比较date2 = $.trim(date2).replace(/\-/gi, "/");var time1 = new Date(date1).getTime();var time2 = new Date(date2).getTime();if (time1 >= time2) {return 1;} else {return 2;}
}//计算一年总共多少周
function getNumOfWeek(year) {var firstDay = new Date(year + "/01/01").getDay(); //本年第一天是星期几 星期天是0var variate = firstDay === 1 ? 0 : 1;//判断当前年第一天是否是周一var nowTotalDays = ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) ? 366 : 365;var totalWeek = Math.ceil(nowTotalDays / 7.0);if(variate === 1 ){//本年第一天不是星期一,示例2019年1月1号为周二,周二至周日(6号)归于2018年最后一周,本年计算周次时间需减去周二至周日共计6天,计算 = 8 - 2(1号周几);totalWeek = Math.ceil((nowTotalDays - (8 - firstDay)) / 7.0);}return totalWeek;
}/*** 获取某年的某天是第几周* @param {Number} y* @param {Number} m* @param {Number} d* @returns {Number}*/
function theWeek(date) {var now = new Date(date),year = now.getFullYear(),month = now.getMonth(),days = now.getDate();//计算当天所在年份的第多少天var nowTotalDays = 0;for (var i = 0; i < month; i++) {nowTotalDays += getMonthDays(year, i);}nowTotalDays += days;//今年第一天到当天的总天数var firstDay = new Date(year +"/01/01").getDay();//console.log("本年第一天是星期:",firstDay);var variate = firstDay === 1 ? 0 : 1;//判断当前年第一天是否是周一var nowWeek = Math.ceil(nowTotalDays / 7.0);if(variate === 1 ){//本年第一天不是星期一nowWeek = Math.ceil((nowTotalDays - (8 - firstDay)) / 7.0) <= 0 ? getNumOfWeek(year - 1):Math.ceil((nowTotalDays - (8 - firstDay)) / 7.0);}return nowWeek;
}  //获取当前日期所在周周一的日期 参数:'2019-07-26'
function theWeekMonday(date) {if (typeof date == "string") {date = date.replace(/-/g, "/");}var now = new Date(date);var day = now.getDay();day = day == 0 ? 6 : day - 1;var monday = now.getTime() - day * 24 * 3600 * 1000;now = new Date(monday);return myformatter(now);
}//日期格式化 参数:Date时间对象
function myformatter(date) {var y = date.getFullYear();var m = date.getMonth() + 1;var d = date.getDate();return y + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d);
}//当天日期格式化
function nowDateFormatter() {var date = new Date();var y = date.getFullYear();var m = date.getMonth() + 1;var d = date.getDate();return y + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d);
}//获取某天日期N天后的日期
function theDayByFuture(date, afterDay) {if (typeof date == "string") {date = date.replace(/-/g, "/");}var now = new Date(date);var monday = now.getTime() + afterDay* 24 * 3600 * 1000;now = new Date(monday);var y = now.getFullYear();var m = now.getMonth() + 1;var d = now.getDate();return y + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d);
}//这个方法将取得某年(year)第几周(weeks)的星期几(weekDay)的日期
//例 参数'2019','1','1' 2019年第一个周一日期为2019-01-07
function getXDate(year, weeks, weekDay) {var date = new Date(year, 0, 1);if (date.getDay() == 1) {weeks = weeks - 1;}var time = date.getTime();time += (weeks) * 7 * 24 * 3600000;date.setTime(time);return getNextDate(date, weekDay);
}//这个方法将取得 某日期(nowDate) 所在周的星期几(weekDay)的日期
//例 参数:'2019-07-26','1'  返回这个日期所在周周一日期是'2019-07-22'
function getNextDate(date, day) {//0是星期日,1是星期一,...if (typeof date == "string") {date = date.replace(/-/g, "/");}var now = new Date(date);var wday = now.getDay();wday = wday == 0 ? 7 : wday;var time = now.getTime();var sub = day - wday;time += sub * 24 * 3600000;now.setTime(time);return myformatter(now);
}/** 校验身份证方法1(推荐) **/
function validateIdCard(idCard){//15位和18位身份证号码的正则表达式var regIdCard=/^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/;//如果通过该验证,说明身份证格式正确,但准确性还需计算if(regIdCard.test(idCard)){if(idCard.length==18){var idCardWi=new Array( 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ); //将前17位加权因子保存在数组里var idCardY=new Array( 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ); //这是除以11后,可能产生的11位余数、验证码,也保存成数组var idCardWiSum=0; //用来保存前17位各自乖以加权因子后的总和for(var i=0;i<17;i++){idCardWiSum+=idCard.substring(i,i+1)*idCardWi[i];}var idCardMod=idCardWiSum%11;//计算出校验码所在数组的位置var idCardLast=idCard.substring(17);//得到最后一位身份证号码//如果等于2,则说明校验码是10,身份证号码最后一位应该是Xif(idCardMod==2){if(idCardLast=="X"||idCardLast=="x"){//console.log("身份证号码正确!");}else{layer.msg("身份证号码信息有误!");return false;}}else{//用计算出的验证码与最后一位身份证号码匹配,如果一致,说明通过,否则是无效的身份证号码if(idCardLast==idCardY[idCardMod]){//console.log("身份证号码正确!");}else{layer.msg("身份证号码信息有误!");return false;}}}}else{layer.msg("身份证号码信息有误!");return false;}return true;
}/** 校验身份证方法2 **/
function IdentityCodeValid(code) {var city = {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 : "国外 "};var tip = "";var pass = true;if (!code|| !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(code)) {tip = "身份证号格式错误";pass = false;}else if (!city[code.substr(0, 2)]) {tip = "身份证地址编码错误";pass = false;} else {//18位身份证需要验证最后一位校验位if (code.length == 18) {code = code.split('');//∑(ai×Wi)(mod 11)//加权因子var factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5,8, 4, 2 ];//校验位var parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ];var sum = 0;var ai = 0;var wi = 0;for ( var i = 0; i < 17; i++) {ai = code[i];wi = factor[i];sum += ai * wi;}var last = parity[sum % 11];if (parity[sum % 11] != code[17]) {tip = "身份证校验位错误";pass = false;}}}if (!pass)layer.alert(tip);return pass;
}//身份证号码判断性别 1=>男  2=>女
function getSexByCardid(cardid) {if (cardid.length == 15) {if (parseInt(cardid.charAt(14) / 2) * 2 != cardid.charAt(14)) {return "1";} else {return "2";}} else if (cardid.length == 18) {if (parseInt(cardid.charAt(16) / 2) * 2 != cardid.charAt(16)) {return "1";} else {return "2";}}
}//通过身份证计算年龄 返回例 [20,2,20] => 20岁2个月20天
function getAgeByCardid(cardid, currentDate) {var birthYear, birthMonth, birthDay;if (cardid.length == 15) {birthYear = "19" + cardid.substr(6, 2);birthMonth = cardid.substr(8, 2);birthDay = cardid.substr(10, 2);} else if (cardid.length == 18) {birthYear = cardid.substr(6, 4);birthMonth = cardid.substr(10, 2);birthDay = cardid.substr(12, 2);} else {alert("身份证长度不合法。");return false;}endCalcYear = currentDate.substr(0, 4);endCalcMonth = Number(currentDate.substr(5, 2));endCalcDay = Number(currentDate.substr(8, 2));return getAge(birthYear, birthMonth, birthDay, endCalcYear, endCalcMonth, endCalcDay);
}/* birthYear 出生年* birthMonth 出生月 从1开始(1-12)* birthDay 出生天* endCalcYear 计算截止日期年* endCalcMonth 计算截止日期月(月份从1开始,即1-12)* endCalcDay 计算截止日期天* 返回例 [20,2,20] => 20岁2个月20天*/
function getAge(birthYear, birthMonth, birthDay, endCalcYear, endCalcMonth, endCalcDay) {var bDate = new Date(); //生日bDate.setFullYear(birthYear, birthMonth - 1, birthDay); //月份从0开始var eDate = new Date(); //计算截止日期eDate.setFullYear(endCalcYear, endCalcMonth - 1, endCalcDay); //月份从0开始var day = eDate.getDate() - bDate.getDate(); //天var month = eDate.getMonth() - bDate.getMonth(); //月var year = eDate.getFullYear() - bDate.getFullYear(); //年if (day < 0) {month -= 1;var tempMonth = eDate.getMonth() - 1; //获取截至计算的月减去1var tempYear = eDate.getFullYear(); //获取截至计算的年//如果月份是1(javascript:0)月份,那么年份就减1,月份设置成11,也就是上一年度的12月份if (tempMonth < 0) { tempYear -= 1;tempMonth = 11;}var addDay = getDayByMonth(tempYear, tempMonth); //获取上一月的天数。   day = day + addDay;}if (month < 0) {month = (month + 12) % 12;year--;}return new Array(year, month, day);
}//博学谷身份证验证(包含港澳台)
var aCity = {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: "国外"
}, taiwaiPatt = /^[A-KM-QT-XZ]{1}[0-9]{9}$/, HKPatt = /^[A-Z][0-9]{5,8}[0-9A]$/, aomenPatt = /^[157][0-9]{6}[0-9]$/;
function isCardID(t) {if (taiwaiPatt.test(t) || HKPatt.test(t) || aomenPatt.test(t))return !0;if (taiwaiPatt.test(t) || HKPatt.test(t) || aomenPatt.test(t))return "身份证号格式错误";var e = 0;if (!/^\d{17}(\d|x)$/i.test(t))return "身份证号格式错误";if (t = t.replace(/x$/i, "a"),null == aCity[parseInt(t.substr(0, 2))])return "身份证号格式错误";sBirthday = t.substr(6, 4) + "-" + Number(t.substr(10, 2)) + "-" + Number(t.substr(12, 2));var i = new Date(sBirthday.replace(/-/g, "/"));if (sBirthday != i.getFullYear() + "-" + (i.getMonth() + 1) + "-" + i.getDate())return "身份证号格式错误";for (var s = 17; s >= 0; s--)e += Math.pow(2, s) % 11 * parseInt(t.charAt(17 - s), 11);return e % 11 == 1 || "身份证号格式错误"
}//通过身份证号码前12位和后4位推出有效的身份证号码
var id = "";
var id1 = '5101081976';
var id3 = '0314';
var total = 0;
for (var i = 0; i < 2; i++) {//月十位total++;for (var i1 = 0; i1 < 3; i1++) {//月个位if (i === 1 && i1 > 2) {continue;}                total++;for (var i2 = 0; i2 < 4; i2++) {//日十位                    id = id1 + i + i1 + i2 + '0' + id3;if(isCardID(id) === true){console.log(id + ' --身份证号码正确--');};total++; for (var i3 = 1; i3 < 10; i3++) {//日个位if (i2 >= 3 && i3 > 2) {continue;}id = id1 + i + i1 + i2 + i3 + id3;if(isCardID(id) === true){console.log(id + ' --身份证号码正确--');};total++;}}}
}
console.log(total)//4位数的组合可能性为11110次,加上月份条件后执行总次数为206次,可以得到12个左右有效的身份证号码

日期和身份证年龄计算相关小工具相关推荐

  1. 简单快捷的人工智能相关小工具集合~

    简单快捷的人工智能相关小工具集合- 目录 一,语料冲突检测工具 二,通过文本相似关系进行聚类 三,AI服务的线上埋点数据反馈 四,AI服务"堵塞守护"工具 五,AI服务压力测试工具 ...

  2. 有关角度分秒,和角度六十进制转换十进制的计算python小工具

    本人是python小白,目前专业是土木类.前几天测量学实习填表的时候发现,角度之间的计算繁琐,容易出错,没有找到角度专用的计算器:除此之外,角度在计算三角函数的时候必须使用十进制的角度,想着就用刚学习 ...

  3. java母子年龄计算,小明12岁了,妈妈的年龄比小明大20岁,请问几年后妈妈的年龄是小明的两倍。

    package ting00001; public class Ting {public static void main(String[]args){ int year=0,monther=32,s ...

  4. TMB计算的小工具-calculate_TMB.exe

    TMB即肿瘤突变负荷,在很多文章中均又涉猎.什么是TMB呢? 普遍认为单位长度内检测到的基因突变个数.例如某检测覆盖基因1MB长度,在1MB长度内检测到了有20个突变,那么就属于肿瘤突变负荷高(TMB ...

  5. 2020-11-28 Latex相关小工具

    手写reference自动排序工具:LaTeXBibitemStyler tex文件的自动缩进工具:latexindent,CSDN下载链接,使用说明 tex文件label的辅助显示工具:showke ...

  6. C++和qt designer的混合编程--动态计算加法小工具

    文章目录 前言 一.准备工作 二.开发步骤 1.新建文件夹 2.编辑add.ui文件 2.具体实现 2.1 编辑add.h文件 2.2 编辑add.cpp文件 2.3 关联槽函数 总结 前言 最近的工 ...

  7. 人生时间计算器_工具拯救效率,高效拯救人生!70个全国工程人实用小工具+算量表格...

    工具拯救效率,高效拯救人生.对在线工具的选取与运用,并不是炫技,而是实实在在提升工作效率.而这份工程量自动计算表+使用小工具对于造价人员而言,都是非常好的实用工具,让你比别人更高效的完成工作. 内容简 ...

  8. 计算机附件中小工具使用方法,找回Win7附件中缺失的小工具

    这里为大家带来的是关于如何找回win7附件中的小工具的方法,大家知道,在window7系统的开始菜单附件中有计算器.记事本.写字板.截图工具.便签.画图工具等非常经典又便捷的小工具,但一些用户反映,这 ...

  9. 开源在线excel编辑器_【技能】十个在线小工具,科研amp;工作必备神器!

    不知道大家是否有和我一样的困扰,需要用某一个软件,但是电脑某一天忽然罢工了,重装系统之后,所有的软件都没有了,又得重新安装.有的大型软件,安装起来能有几个小时,安装过程中又得面对各种问题.我就想着如果 ...

最新文章

  1. Python 字典(Dictionary) copy()方法
  2. PHP MySQLi/PDO_MySQL/PDO_SQLite CRUD(增查改删)
  3. freemarker该阵列
  4. pyinstaller将python脚本转成exe可执行文件
  5. 分享20个常用的Python函数,轻松玩转Pandas!!
  6. 【转】 VC MFC 钩子 实现 自绘 窗体 标题栏 非客户区
  7. pycharm无法导入Pillow
  8. Spring MVC 响应数据、作用域对象
  9. 总结开发Silverlight项目准则 [转]
  10. C/C++中struct结构体定义变量的3种方法及初始化
  11. asp.net937-图书馆座位管理系统
  12. SQLyog v12.09 (64 bit) 注册码
  13. c语言除法连续运算,单片机C语言快速精度除法方案
  14. VOT Toolkit环境配置与使用
  15. SCLS:微生物所方荣祥/张莉莉团队开发植物内生细菌特异16S引物
  16. Altium Designer,设置一个器件或一个区域不做电气规则检查
  17. 【汇智学堂】-div+css布局十二(商品列表图文展示)
  18. 磕磕碰碰三个月,终进字节
  19. php网页怎么设置背景图片大全唯美,html文档中怎么把图片作为背景?
  20. 第一启富金:两大利空压顶 黄金受压收跌

热门文章

  1. Windows中文键盘消失
  2. Python + selenium自动化工具 + 滑块验证码+点选验证码,实现模拟登录“中国铁路网12306”
  3. (附Matlab程序)(二)基于DCT编码的图像压缩:对分解后的每个数据小方块进行DCT及IDCT变换
  4. 张凌杰 html5,武汉理工大学第四届学位评定委员会第三次会议授予博士、硕士学位名单...
  5. 磁盘阵列柜性能介绍(一)
  6. 可塑造攻击_指导如何帮助塑造我的职业
  7. MacBook不接电源实现外接显示器功能
  8. Windows下jmeter使用
  9. 算法4 随书 IDE:DrJava 在 Win10 下高分屏字体太小问题解决
  10. Android UI - 粒子爆炸特效