身份证合法性校验规则

  • 身份证构成说明:

 

身份证号构成(从左到右):

第1-6位数是行政区域编码

第7到第14位是出生日期

第15-17位是同一天出生的顺序号(男的用奇数数,女的用偶数)

第18位是校验码,根据ISO7064:1983.MOD11-2校验码算法可以验证该身份证号是否合法身份证号。

  • 身份证格式校验:

1、取第7到10位的字符,校验出生年份:是否在 1900年到2022年之间的;

2、取第11到12位的字符,校验出生月份:是否在1-12;

3、取第13到14位校验日期:是否在1-31;

以上三步都校验通过,说明用户的身份证通过格式校验;

  • 身份证合法性校验:

校验最后一位:使用ISO7064:1983.MOD11-2 校验码算法,算出一个值,通过该值跟身份证号最后一位比对,正确则该身份证合法有效。

步骤一:将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:

7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2

步骤二:将这17位数字和系数相乘的结果相加。

步骤三:用加出来和除以11,得到一个余数。

步骤四:余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的最后一位身份证的号码为1-0-X -9-8-7-6-5-4-3-2。

映射参考:

0-1-2-3-4-5-6-7-8-9-10

1-0-X -9-8-7-6-5-4-3-2

步骤五:根据余数取对应位置的数,跟身份证最后一位对比,一致则该身份证有效,不一致则无效。

例如:某男性的身份证号码为【53010219200508011x】, 我们利用最后一位的校验码来看看这个身份证是不是合法的身份证。

首先我们得出前17位的乘积和【(5*7)+(3*9)+(0*10)+(1*5)+(0*8)+(2*4)+(1*2)+(9*1)+(2*6)+(0*3)+(0*7)+(5*9)+(0*10)+(8*5)+(0*8)+(1*4)+(1*2)】是189,然后用189除以11得出的结果是189/11=17----2,也就是说其余数是2。最后通过对应规则就可以知道余数2对应的检验码是X。所以,可以判定这是一个正确的身份证号码。

set @identityno='5301021920508011x';
select
       case when substr(@identityno, 7, 4) not between '1900' and '2022' then '身份证年份校验不通过'
    when substr(@identityno, 11, 2) not between '01' and '12' then '身份证月份校验不通过'
    when substr(@identityno, 13, 2) not between '01' and '31' then '身份证日期校验不通过'
        when mod(
            (
                substr(@identityno, 1, 1) * 7 + substr(@identityno, 2, 1) * 9 + substr(@identityno, 3, 1) * 10 + substr(@identityno, 4, 1) * 5 + substr(@identityno, 5, 1) * 8 + substr(@identityno, 6, 1) * 4 + substr(@identityno, 7, 1) * 2 + substr(@identityno, 8, 1) * 1 + substr(@identityno, 9, 1) * 6 + substr(@identityno, 10, 1) * 3 + substr(@identityno, 11, 1) * 7 + substr(@identityno, 12, 1) * 9 + substr(@identityno, 13, 1) * 10 + substr(@identityno, 14, 1) * 5 + substr(@identityno, 15, 1) * 8 + substr(@identityno, 16, 1) * 4 + substr(@identityno, 17, 1) * 2
            ),
            11
        ) <> (
            case
                when substr(@identityno, 18, 1) = '1' then '0'
                when substr(@identityno, 18, 1) = '0' then '1'
                when substr(@identityno, 18, 1) in ('X', 'x') then '2'
                when substr(@identityno, 18, 1) = '9' then '3'
                when substr(@identityno, 18, 1) = '8' then '4'
                when substr(@identityno, 18, 1) = '7' then '5'
                when substr(@identityno, 18, 1) = '6' then '6'
                when substr(@identityno, 18, 1) = '5' then '7'
                when substr(@identityno, 18, 1) = '4' then '8'
                when substr(@identityno, 18, 1) = '3' then '9'
                when substr(@identityno, 18, 1) = '2' then '10'
            end
        ) then '身份证合法性校验不通过'
        else '有效身份证'
    end as ret
from dual

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用 Element UI 的表单校验功能来验证身份证合法性。你可以通过在表单项的 `rules` 属性中定义自定义校验规则来实现。下面是一个示例代码: ```html <template> <el-form :model="form" label-width="80px"> <el-form-item label="身份证号码" prop="idCard"> <el-input v-model="form.idCard"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm">提交</el-button> </el-form-item> </el-form> </template> <script> export default { data() { return { form: { idCard: '' } }; }, methods: { submitForm() { this.$refs.form.validate((valid) => { if (valid) { // 表单验证通过,执行提交操作 // ... } else { // 表单验证失败 return false; } }); } }, mounted() { this.$refs.form.resetFields(); } }; </script> ``` 然后,你需要在自定义校验规则中添加身份证验证的逻辑。可以使用正则表达式或其他方法进行验证。以下是一个使用正则表达式验证身份证号码的示例: ```javascript import { validateIdCard } from '@/utils/validator'; // 导入自定义的身份证验证函数 export default { data() { return { form: { idCard: '' }, rules: { idCard: [ { required: true, message: '请输入身份证号码', trigger: 'blur' }, { validator: validateIdCard, trigger: 'blur' } ] } }; }, methods: { submitForm() { this.$refs.form.validate((valid) => { if (valid) { // 表单验证通过,执行提交操作 // ... } else { // 表单验证失败 return false; } }); } }, mounted() { this.$refs.form.resetFields(); } }; ``` 在上面的代码中,`validateIdCard` 是一个自定义的验证函数,你可以根据自己的需求来实现。该函数接收一个参数(即输入的身份证号码),并返回一个布尔值表示是否通过验证。在 `rules` 中使用 `{ validator: validateIdCard, trigger: 'blur' }` 的方式来添加自定义校验规则。 请注意,这只是一个示例,你需要根据具体的业务需求和正则表达式来实现身份证合法性校验

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值