# 身份证校验

## 身份证编码解析

![image-20220414111909659](C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20220414111909659.png)

## 身份证编码校验

### 省级地址码校验

​           华北:北京11,天津12,河北13,山西14,内蒙古15

​           东北: 辽宁21,吉林22,黑龙江23

​           华东: 上海31,江苏32,浙江33,安徽34,福建35,江西36,山东37

​           华中: 河南41,湖北42,湖南43

​           华南: 广东44,广西45,海南46

​           西南: 四川51,贵州52,云南53,西藏54,重庆50

​           西北: 陕西61,甘肃62,青海63,宁夏64,新疆65

​           特别:中国台湾71,中国香港81,中国澳门82

#### 校验码

```js

// ^从头开始校验 第一位:1-9 第二位:0-9

var pattern = /^[1-9][0-9]/

```

### 年份码校验

- 年份码长4位

- 以数字18,19或20开头

- 剩余两位为0-9的数字

#### 校验码

```js

// 18/19/20开头 \d数字(0-9)随机出现两位

var year = /(18|19|20)\d{2}/

```

### 月份码校验

- 月份码长2位

- 第一位数字为0,第二位数字为1-9,表示前9个月份

- 或者第一位数字为1,第二位数字为0-2,表示10、11、12三个月份

#### 校验码

```js

// 月份:0[1-9]前九月 |或则 1[0-2]尾三月10、11、12

var year = /((0[1-9])|(1[0-2]))/

```

### 日期校验

- 日期码长2位

- 第一位数字为0-2,第二位数字为1-9

- 或者是10,20,30,31

#### 校验码

```js

// 日期:01-09 | 11-19 | 21-29 | 特殊日期 10、20、30、31

var date = /(([0-2][1-9])|10|20|30|31)/

```

### 顺序码校验

- 顺序码长3位

- 顺序码是数字

#### 校验码

```js

// 顺序码:\d数字 {3}出现3位

var order = /\d{3}/

```

### 校验码校验

- 校验码长1位

- 可以是数字,字母x或字母X

- 校验码计算公式:ai 表示身份证编码地 i 位值,Wi 表示第 i 位的加权因子值 ,根据身份证主体码(前17位)分别与对应的加权因子(加权因子表)计算乘积再求和,根据所得结果与 11 取模得到X值。

- 根据 X 值查询 校验码换算表,得出 a18 即校验码值。

​   ![image-20220414115040674](C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20220414115040674.png)

- 加权因子表

![image-20220414115555082](C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20220414115555082.png)

- 校验码换算表

![image-20220414115639939](C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20220414115639939.png)

## 综合校验

```js

// 校验方法(身份证编码);

var checkCode = function (val) {

// 校验规则 正则表达式

var p = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;

// 加权因子

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 ];

// 截取身份证前 17 位编码(除校验码外)

var code = val.substring(17);

// 正则表达式校验

if(p.test(val)) {

// 统计校验和

var sum = 0;

for(var i=0;i<17;i++) {

sum += val[i]*factor[i];

}

// 判断校验码

if(parity[sum % 11] == code.toUpperCase()) {

// 校验成功

return true;

}

}

// 校验失败

return false;

}

// 输出 true, 校验码相符

console.log(checkCode("11010519491231002X"));

// 输出 false, 校验码不符

console.log(checkCode("110105194912310021"));

```

## 例

#### html:

```html

<el-dialog title="用户注册" class="loginForm" :visible.sync="registerFormVisible" width="30%">

<!-- rules:校验名称 ref:校验对象 -->

<el-form :model="registerForm" rules="registerRules" ref="RegisterForm">

<!-- prop:校验项名称 -->

<el-form-item label="身份证号:" prop="srIdCard" :label-width="registerFormLabelWidth">

<el-input v-model="registerForm.srIdCard" autocomplete="off" style="width: 75%">       </el-input>

</el-form-item>

</el-form>

</el-dialog>

```

#### js

```js

export default {

data() {

// 身份证校验

var validateIdCard = (rule, value,callback) => {

// 身份证校验正则表达式

// var p =/^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;

// 18 位校验正则表达式

var _IDRe18 =/^([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]$/;

// 15 位校验正则表达式

var _IDre15 =/^([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}$/;

// 加权因子

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];

// 身份证前 17 位

var code = value.substring(17);

// 正则校验

if (_IDre15.test(value)||_IDRe18.test(value)) {

var sum = 0;

for (var i = 0; i < 17; i++) {

sum += value[i] * factor[i];

}

// 校验码校验

if (parity[sum % 11] !== code.toUpperCase()) {

callback(new Error("身份证错误!"));

}

else{

callback();

}

}

else{

callback(new Error("身份证错误!"));

}

};

return{

// 注册校验:relus = registerRules

registerRules: {

// 身份证校验规则

srIdCard: [

// 内置校验

{ required: true, message: "请输入身份证", trigger: "blur" },

// 自定义校验:身份证校验 validateIdCard();

{ validator: validateIdCard, trigger: "blur" },

],

},

// return

},

//data

},

methods: {

// 注册提交

subRegisterForm: function (form) {

// 校验表单

this.$refs[form].validate((valid) => {

// 注册验证成功

if (valid) {

axios

.post(

"http://localhost:8080/user/register",

qs.stringify({

srName: this.registerForm.name,

srPassword: this.registerForm.password,

srIdCard: this.registerForm.srIdCard,

})

)

.then((res) => {

if (res.data.code == 0) {

this.registerFormVisible = false;

this.$message({

type: "success",

message: res.data.msg,

});

return;

}

// 注册失败

this.$message({

type: "success",

message: res.data.msg,

});

});

}

});

},

// method

}

```

皇甫懒懒 华清远见Java学习笔记-身份证校验相关推荐

  1. 华清远见java学习心得

    十几年的"老学究",如果还没有自己的一套学习方式,那我觉得可以"拜了佛冷"了,可经过大学最后一年多时间的学习,我发现我的学习方式好像失灵了.对,就是失灵了,之前 ...

  2. 华清远见—java web后端学习总结

    通过这阶段的学习,学到了很多,也领悟了很多,这阶段不在是像以前那样一个一个知识点的分开讲了,这阶段把以前学的东西都整合到了一起,通过这阶段的学习,也使以前的知识再一次得到了回顾.然而这个阶段的东西逻辑 ...

  3. 华清远见java课程视频_Java视频教学最适合初学者的学习方式~华清远见

    Java视频教学最适合初学者的学习方式~华清远见 现如今随着软件行业的快速发展学习软件编程的人员也越来越多,其中不乏跨行业转行应届毕业生等零基础的朋友,为了能够圆这一部分朋友的金领的梦,华清远见数十名 ...

  4. 华清远见-JAVA面向对象简单总结

    以下是一个Java初学者对Java面向对象学习的简单总结,可能有些地方说的不是很对或不是很全面,望谅解. 在学习java面向对象时,首先,我们要搞清楚java面向过程和面向对象编程思想的区别.对于面向 ...

  5. 华清远见java考试题_Java面试题,你能答对几个?

    学IT技术是很热门的,但是对于找工作来说,最能看出你的能力的就是面试题了,对于java程序员来说,这里总结了java面试题,让你轻松过面试. 1. Java编译的指令是什么 编译是:javac jav ...

  6. 华清远见-STM32 SPI笔记

    一,SPI介绍 SPI英文名叫Serial  Peripheral  Interface,中文名叫串行外围设备接口.是由Motorola公司开发,用来在微控制器和外围设备芯片之间提供一个低成本.易使用 ...

  7. STM32MP1系列教程连载-华清远见FS-MP1A开发板使用

    STM32MP1系列教程连载-华清远见FS-MP1A开发板使用 1.1 FS_MP1A硬件资源介绍 FS-MP1A采用STM32MP157A处理器.STM32MP157A是基于Cortex-A7 32 ...

  8. 华清远见ARM开发培训班

       课程背景 ATC的英文全称是Approved Training Center,即授权培训中心.ARM ATC就是指ARM公司授权的培训中心.目前ARM公司在包括英国.德国.美国.日本.韩国.台湾 ...

  9. 【java学习笔记day01】运行第一个程序Helloworld!

    java学习笔记day01 2.什么是软件工程师? 3.什么是软件? 4.开发软件需要计算机编程语言,计算机编程语言有很多,例如 c, c++,Java,NET,c#,php... 5.Java软件工 ...

最新文章

  1. Error in eval(predvars, data, env) : object ‘**‘ not found
  2. 前端JS的一些使用方法-持续更新
  3. 打开git命令窗口_用动图的形式打开 10 大 Git 命令?
  4. unicode and utf-8
  5. [MATLAB学习笔记]textread读取文本文件中的数据;写入多个输出
  6. WM_CTLCOLOR消息
  7. MySQL笔记-Linux平台中MySQL的启动和关闭
  8. Drools创建Maven工程
  9. 计算机 旧词新说_如何使旧计算机再次有用
  10. Discuz!NT CreditsOperationType
  11. linux 拷机软件,拷机软件跑起来,OS X平台下OpenGL初体验
  12. 深度学习根据文字生成图片教程(附python代码)
  13. Flask 参数简介
  14. 一、Multisim软件介绍
  15. MATLAB图像的读取和显示
  16. IK10外壳冲击等级测试
  17. 现阶段人工智能应用涉及到哪些行业?
  18. 2021年黄石二中高考成绩查询,【黄石二中2018高考金榜】黄石二中2004届高考总结...
  19. PowerDesigner 15下载(破解)
  20. LoadRunner思考时间

热门文章

  1. 人工智能、深度学习、机器学习常见面试题41~55
  2. i.MX283开发板第一个Linux驱动-LED驱动
  3. 前端开发:a标签的使用
  4. Percona监控工具初探
  5. 【NP问题】P问题,NP问题,NPC问题,NPH问题
  6. mysql积累--面试题
  7. bzoj-1123 BLO
  8. Vue 中使用 axios 传输数据,当数据量过大时会提示跨域?(√已解决)
  9. 其他:Pycharm 常用快捷键
  10. Mybatis实现分页功能