身份证号码

Posted MorningKit

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了身份证号码相关的知识,希望对你有一定的参考价值。

function checkidcard(str) {
	var temp = {};
	if (id_cards.checkCard(str)) {
		temp.msg = "";
		temp.statu = true;
		return temp;
	} else {
		temp.msg = "身份证号格式不正确";
		temp.statu = false;
		return temp;
	}
}

//身份证号码
var id_cards = {
	cities: {
		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: "国外"
	},
	checkCard: function(a) {
		return this.isCardNo(a) && this.checkProvince(a) && this.checkBirthday(a) && this.checkParity(a)
	},
	isCardNo: function(a) {
		var b = /(^\d{15}$)|(^\d{17}(\d|X)$)/i;
		return b.test(a)
	},
	checkProvince: function(a) {
		var b = a.substr(0, 2);
		return void 0 == this.cities[b] ? !1 : !0
	},
	checkBirthday: function(a) {
		var b = a.length;
		if ("15" == b) {
			var c = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/,
				d = a.match(c),
				e = d[2],
				f = d[3],
				g = d[4],
				h = new Date("19" + e + "/" + f + "/" + g);
			return this.verifyBirthday("19" + e, f, g, h)
		}
		if ("18" == b) {
			var i = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/i,
				d = a.match(i),
				e = d[2],
				f = d[3],
				g = d[4],
				h = new Date(e + "/" + f + "/" + g);
			return this.verifyBirthday(e, f, g, h)
		}
		return !1
	},
	checkParity: function(a) {
		var b = a.length;
		if ("18" == b) {
			var c, d, e = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2),
				f = new Array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"),
				g = 0;
			for (c = 0; 17 > c; c++) g += a.substr(c, 1) * e[c];
			return d = f[g % 11],
				d == a.substr(17, 1).toUpperCase() ? !0 : !1
		}
		return !0
	},
	verifyBirthday: function(a, b, c, d) {
		var e = new Date,
			f = e.getFullYear();
		if (d.getFullYear() == a && d.getMonth() + 1 == b && d.getDate() == c) {
			var g = f - a;
			return g >= 0 && 120 >= g ? !0 : !1
		}
		return !1
	}
};

  

以上是关于身份证号码的主要内容,如果未能解决你的问题,请参考以下文章

身份证号码的地区代码分别是啥?

java代码怎么校验身份证号码含有非法字符

如何利用身份证号码计算出生年月,年龄及性别

怎样知道身份证号码是哪个省的?

中国身份证号码验证原理

js验证身份证号码是否合规