为了清晰地演示实现身份证格式验证、输出出生日期、性别、年龄和出生地的功能,我将提供以下步骤:
步骤一:获取用户输入的身份证号码
首先,我们需要通过HTML页面的HTML元素(例如用户输入框)来获取用户输入的身份证号码。我们可以使用类似以下的代码来完成这个步骤:
<input type="text" id="idCard" placeholder="请输入身份证号码" />
步骤二:验证身份证格式
接下来,我们需要对用户输入的身份证格式进行验证,以确保其符合中国的身份证数字正则表达式。我们可以使用JavaScript的正则表达式来完成这个步骤。以下是一个示例的函数来实现这个功能:
function checkIdCard(idCard) {
// 根据规则验证身份证号码是否符合格式要求
var reg = /(^\d{15}$)|(^\d{17}([0-9]|X)$)/;
if (reg.test(idCard) === false) {
alert("身份证号码格式不正确");
return false;
}
return true;
}
当用户输入错误格式的身份证号码时,会弹出窗口提示用户重新输入。
步骤三:获取出生日期、性别和出生地
接下来,我们需要使用JavaScript获取输入的身份证号码,并从中提取出正确的出生日期、性别和出生地。以下是一个示例的函数来实现这个功能:
function getIdCardInfo(idCard) {
var info = {
birthday: "",
sex: "",
region: ""
};
if (idCard.length == 15) {
//获取出生日期
info.birthday =
"19" +
idCard.charAt(6) +
idCard.charAt(7) +
"-" +
idCard.charAt(8) +
idCard.charAt(9) +
"-" +
idCard.charAt(10) +
idCard.charAt(11);
//获取性别
if (parseInt(idCard.charAt(14)) % 2 == 0) {
info.sex = "女";
} else {
info.sex = "男";
}
//获取出生地
info.region = idCard.substr(0, 6);
} else if (idCard.length == 18) {
//获取出生日期
info.birthday =
idCard.charAt(6) +
idCard.charAt(7) +
idCard.charAt(8) +
idCard.charAt(9) +
"-" +
idCard.charAt(10) +
idCard.charAt(11) +
"-" +
idCard.charAt(12) +
idCard.charAt(13);
//获取性别
if (parseInt(idCard.charAt(16)) % 2 == 0) {
info.sex = "女";
} else {
info.sex = "男";
}
//获取出生地
info.region = idCard.substr(0, 6);
}
return info;
}
步骤四:计算年龄
最后,我们需要使用JavaScript计算出输入的身份证号码对应的年龄。以下是一个示例的函数来实现这个功能:
function getAge(idCard) {
var birthday = getIdCardInfo(idCard).birthday;
var birthDate = new Date(birthday);
var nowDate = new Date();
var age = nowDate.getFullYear() - birthDate.getFullYear();
if (
nowDate.getMonth() < birthDate.getMonth() ||
(nowDate.getMonth() == birthDate.getMonth() &&
nowDate.getDate() < birthDate.getDate())
) {
age--;
}
return age;
}
示例说明
以下是一个完整的示例,在用户在输入框中输入身份证号码后,它将会通过JavaScript对身份证号码格式进行验证,如果验证通过,就会输出用户的出生日期、年龄、性别和出生地。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>身份证格式验证</title>
</head>
<body>
<input type="text" id="idCard" placeholder="请输入身份证号码" />
<button onclick="getIDCard()">提交</button>
<div id="result"></div>
</body>
<script>
function checkIdCard(idCard) {
var reg = /(^\d{15}$)|(^\d{17}([0-9]|X)$)/;
if (reg.test(idCard) === false) {
alert("身份证号码格式不正确");
return false;
}
return true;
}
function getIdCardInfo(idCard) {
var info = {
birthday: "",
sex: "",
region: ""
};
if (idCard.length == 15) {
info.birthday =
"19" +
idCard.charAt(6) +
idCard.charAt(7) +
"-" +
idCard.charAt(8) +
idCard.charAt(9) +
"-" +
idCard.charAt(10) +
idCard.charAt(11);
if (parseInt(idCard.charAt(14)) % 2 == 0) {
info.sex = "女";
} else {
info.sex = "男";
}
info.region = idCard.substr(0, 6);
} else if (idCard.length == 18) {
info.birthday =
idCard.charAt(6) +
idCard.charAt(7) +
idCard.charAt(8) +
idCard.charAt(9) +
"-" +
idCard.charAt(10) +
idCard.charAt(11) +
"-" +
idCard.charAt(12) +
idCard.charAt(13);
if (parseInt(idCard.charAt(16)) % 2 == 0) {
info.sex = "女";
} else {
info.sex = "男";
}
info.region = idCard.substr(0, 6);
}
return info;
}
function getAge(idCard) {
var birthday = getIdCardInfo(idCard).birthday;
var birthDate = new Date(birthday);
var nowDate = new Date();
var age = nowDate.getFullYear() - birthDate.getFullYear();
if (
nowDate.getMonth() < birthDate.getMonth() ||
(nowDate.getMonth() == birthDate.getMonth() &&
nowDate.getDate() < birthDate.getDate())
) {
age--;
}
return age;
}
function getIDCard() {
var idCard = document.getElementById("idCard").value;
if (checkIdCard(idCard) === true) {
var info = getIdCardInfo(idCard);
var age = getAge(idCard);
var result =
"出生日期:" +
info.birthday +
"<br> 性别:" +
info.sex +
"<br> 年龄:" +
age +
"<br> 出生地:" +
info.region;
document.getElementById("result").innerHTML = result;
}
}
</script>
</html>
再看一个手机H5页面实现的身份证信息显示案例:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0">
<meta http-equiv="cache-control" content="no-cache"/>
<meta http-equiv="pragma" content="no-cache"/>
<meta http-equiv="expires" content="0"/>
<title>身份证信息查询</title>
<style>
body,html,div{
margin: 0;
padding: 0;
width: 100%;
height: 100%;
font-size: 16px;
overflow: hidden;
}
h1,h2,h3{
text-align: center;
margin-top: 15px;
}
#idCard{
width: 100%;
height: 20%;
padding-top: 20%;
text-align: center;
font-size: 20px;
background-color: white;
}
#result{
text-align: center;
font-size: 16px;
margin:15px;
line-height:20px;
}
</style>
</head>
<body>
<h1>身份证信息查询</h1>
<input type="text" id="idCard" placeholder="点击此处输入身份证号码" />
<div id="result"></div>
<script>
function checkIdCard(idCard) {
var reg = /(^\d{15}$)|(^\d{17}([0-9]|X)$)/;
if (reg.test(idCard) === false) {
alert("身份证号码格式不正确");
return false;
}
return true;
}
function getIdCardInfo(idCard) {
var info = {
birthday: "",
sex: "",
region: ""
};
if (idCard.length == 15) {
info.birthday = "19" + idCard.charAt(6) + idCard.charAt(7) + "-" + idCard.charAt(8) + idCard.charAt(9) + "-" + idCard.charAt(10) + idCard.charAt(11);
if (parseInt(idCard.charAt(14)) % 2 == 0) {
info.sex = "女";
} else {
info.sex = "男";
}
info.region = idCard.substr(0, 6);
} else if (idCard.length == 18) {
info.birthday = idCard.charAt(6) + idCard.charAt(7) + idCard.charAt(8) + idCard.charAt(9) + "-" + idCard.charAt(10) + idCard.charAt(11) + "-" + idCard.charAt(12) + idCard.charAt(13);
if (parseInt(idCard.charAt(16)) % 2 == 0) {
info.sex = "女";
} else {
info.sex = "男";
}
info.region = idCard.substr(0, 6);
}
return info;
}
function getAge(idCard) {
var birthday = getIdCardInfo(idCard).birthday;
var birthDate = new Date(birthday);
var nowDate = new Date();
var age = nowDate.getFullYear() - birthDate.getFullYear();
if (nowDate.getMonth() < birthDate.getMonth() || (nowDate.getMonth() == birthDate.getMonth() && nowDate.getDate() < birthDate.getDate())) {
age--;
}
return age;
}
function getIDCard() {
var idCard = document.getElementById("idCard").value;
if (checkIdCard(idCard) === true) {
var info = getIdCardInfo(idCard);
var age = getAge(idCard);
var result = "出生日期:" + info.birthday + "\n 性别:" + info.sex + "\n 年龄:" + age + "\n 出生地:" + info.region;
document.getElementById("result").innerHTML = result;
}
}
document.getElementById("idCard").addEventListener("click", function(){
document.getElementById('idCard').setAttribute('type', 'number');
document.getElementById('idCard').focus();
document.getElementById('idCard').addEventListener('blur', function(){
document.getElementById('idCard').setAttribute('type', 'text');
});
});
document.getElementById("idCard").addEventListener("keyup", function(event) {
if (event.keyCode === 13) {
getIDCard();
}
});
</script>
</body>
</html>
这个示例与前面的示例不同在于:
- 输入框是可点击(默认为文本输入)的,点击时将弹出数字键盘(type为number),输入完成后失去焦点自动变成文本输入,避免出现奇怪的闪烁效果;
- 绑定了keyup事件,在输入完身份证号码后敲下enter键即可提交。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS实现的检验身份证格式并输出出生日期,年龄,性别,出生地示例 - Python技术站