常用的的身份证校验方法
目录
考虑身份证的位数,身份证包涵的信息,如下所示
省份码(2位) 地级市(2位) 区县码(2位) 出生年月(8位) 顺序码(3位) 校验码(1位)
15位:6位地址码 6位出生年月日(年份取后两位) 3位顺序码
18位:6位地址码 8位出生年月日 3位顺序码 1位校验码
地区码:
1、 第一、二位表示省(自治区、直辖市、特别行政区)
2、 第三、四位表示市(地级市、自治州、盟及国家直辖市所属市辖区和县的汇总码,其中,01-20,51-70表示省直辖市;21-50表示地区(自治州、盟))
3、 第五、六位表示县(市辖区、县级市、旗,其中,01-18表示市辖区或地区(自治州、盟)辖县级市;21-80表示县(旗);81-99表示省直辖县级市)。
顺序码:奇数分给男性,偶数分给女性。
校验码:即身份证的最后一位,是把身份证号码按统一的公式计算出来的(10个数字,0-9正常表示,10=X)
1、前端校验
具体内容如下:
-
=====VUE中表单校验方法================================================================
-
export default {
-
name:'',
-
components: {
-
},
-
data() {
-
//身份证校验
-
const isCnNewID = (rule, value, callback) => {
-
var arrExp = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];//加权因子
-
var arrValid = [1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2];//校验码
-
if (/^\d{17}\d|x$/i.test(value)) {
-
var sum = 0, idx;
-
for (var i = 0; i < value.length - 1; i ) {
-
// 对前17位数字与权值乘积求和
-
sum = parseInt(value.substr(i, 1), 10) * arrExp[i];
-
}
-
// 计算模(固定算法)
-
idx = sum % 11;
-
// 检验第18为是否与校验码相等
-
if (arrValid[idx] == value.substr(17, 1).toUpperCase()) {
-
callback()
-
} else {
-
callback("身份证格式有误")
-
}
-
} else {
-
callback("身份证格式有误")
-
}
-
}
-
return {
-
title:'',
-
open:false,
-
form:{},
-
//表单校验
-
rules: {
-
idCardNumber: [
-
{ required: true, message: "身份证不能为空", trigger: "blur" },
-
{ //调用上面定义的方法校验格式是否正确
-
validator: isCnNewID,trigger: "blur"
-
}
-
]
-
}
-
}
-
}
-
-
======获取身份证中的信息=============================================================
-
//获取身份证中的信息
-
//当type=1时获取出生日期,type=2时获取性别,type=3时获取年龄
-
IdCardNum(IdCard, type) {
-
if (type === 1) {
-
//获取出生日期
-
let birthday =
-
IdCard.substring(6, 10)
-
"年"
-
IdCard.substring(10, 12)
-
"月"
-
IdCard.substring(12, 14)
-
"日";
-
return birthday;
-
}
-
if (type === 2) {
-
//获取性别
-
if (parseInt(IdCard.substr(16, 1)) % 2 === 1) {
-
return "男";
-
} else {
-
return "女";
-
}
-
}
-
if (type === 3) {
-
//获取年龄
-
var ageDate = new Date();
-
var month = ageDate.getMonth() 1;
-
var day = ageDate.getDate();
-
var age = ageDate.getFullYear() - IdCard.substring(6, 10) - 1;
-
if (
-
IdCard.substring(10, 12) < month ||
-
(IdCard.substring(10, 12) === month &&
-
IdCard.substring(12, 14) <= day)
-
) {
-
age ;
-
}
-
if (age <= 0) {
-
age = 1;
-
}
-
return age;
-
}
-
},
2、后端代码计算
具体工具类如下:
-
public class CalculateUserInfoByIdCardNumUtils {
-
-
/**
-
* 根据身份证号计算年龄1
-
*/
-
public static String calculateAge(String idNumber) {
-
String age = null;
-
if (idNumber != null || idNumber != "") {
-
Calendar cal = Calendar.getInstance();
-
int yearNow = cal.get(Calendar.YEAR);
-
int monthNow = cal.get(Calendar.MONTH) 1;
-
int dayNow = cal.get(Calendar.DATE);
-
int year = Integer.valueOf(idNumber.substring(6, 10));
-
int month = Integer.valueOf(idNumber.substring(10, 12));
-
int day = Integer.valueOf(idNumber.substring(12, 14));
-
if ((month < monthNow) || (month == monthNow && day <= dayNow)) {
-
age = String.valueOf(yearNow - year);
-
} else {
-
age = String.valueOf(yearNow - year - 1);
-
}
-
return age;
-
} else {
-
age = idNumber;
-
return age;
-
}
-
}
-
-
/**
-
* 根据身份证号计算年龄2
-
*/
-
public static String calculateAges(String idNumber) {
-
String age = "";
-
if (idNumber == null || "".equals(idNumber)) {
-
return "当前身份证件号为空!请正确填写身份证号!";
-
}else if (idNumber.length() != 15 && idNumber.length() != 18) {
-
return "当前身份证件号有误!请检查身份证位数是否正确或是否输入空格!";
-
}else {
-
Calendar cal = Calendar.getInstance();
-
int yearNow = cal.get(Calendar.YEAR);
-
int monthNow = cal.get(Calendar.MONTH) 1;
-
int dayNow = cal.get(Calendar.DATE);
-
int year = Integer.valueOf(idNumber.substring(6, 10));
-
int month = Integer.valueOf(idNumber.substring(10, 12));
-
int day = Integer.valueOf(idNumber.substring(12, 14));
-
if ((month < monthNow) || (month == monthNow && day <= dayNow)) {
-
age = String.valueOf(yearNow - year);
-
} else {
-
age = String.valueOf(yearNow - year - 1);
-
}
-
}
-
return age;
-
}
-
-
-
/**
-
* 根据身份证号判断性别
-
*/
-
public static String judgeGender(String idNumber) throws IllegalArgumentException {
-
if (idNumber == null || "".equals(idNumber)) {
-
return "当前身份证件号为空!请正确填写身份证号!";
-
}else if (idNumber.length() != 18 && idNumber.length() != 15) {
-
throw new IllegalArgumentException("身份证号长度错误");
-
}
-
int gender = 0;
-
if (idNumber.length() == 18) {
-
//如果身份证号18位,取身份证号倒数第二位
-
char c = idNumber.charAt(idNumber.length() - 2);
-
gender = Integer.parseInt(String.valueOf(c));
-
} else {
-
//如果身份证号15位,取身份证号最后一位
-
char c = idNumber.charAt(idNumber.length() - 1);
-
gender = Integer.parseInt(String.valueOf(c));
-
}
-
//System.out.println("gender = " gender);
-
if (gender % 2 == 1) {
-
return "0";
-
} else {
-
return "1";
-
}
-
}
-
-
-
/**
-
* 根据身份证的号码算出当前身份证持有者的年龄
-
*
-
* @return -1(表示异常) 0 (身份证号码为空)
-
* @throws Exception
-
*/
-
public static String getAgeForIdcard(String idcard) {
-
try {
-
String age = String.valueOf(0);
-
if (StringUtils.isEmpty(idcard)) {
-
return age;
-
}
-
String birth = "";
-
if (idcard.length() == 18) {
-
birth = idcard.substring(6, 14);
-
} else if (idcard.length() == 15) {
-
birth = "19" idcard.substring(6, 12);
-
}
-
int year = Integer.valueOf(birth.substring(0, 4));
-
int month = Integer.valueOf(birth.substring(4, 6));
-
int day = Integer.valueOf(birth.substring(6));
-
Calendar cal = Calendar.getInstance();
-
age = String.valueOf(cal.get(Calendar.YEAR) - year);
-
int ages = Integer.parseInt(age);
-
//周岁计算
-
if (cal.get(Calendar.MONTH) < (month - 1) || (cal.get(Calendar.MONTH) == (month - 1) && cal.get(Calendar.DATE) < day)) {
-
ages--;
-
}
-
age = String.valueOf(ages);
-
return age;
-
} catch (Exception e) {
-
e.getMessage();
-
}
-
return "-1";
-
}
-
}
身份证的正则表达式
-
let IDNum18 = /^([1-6][1-9]|50)\d{4}(18|19|20)\d{2}((0[1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
-
let IDNum15 = /^([1-6][1-9]|50)\d{4}\d{2}((0[1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\d{3}$/
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhghafjg
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13