身份证合法性校验规则

这篇具有很好参考价值的文章主要介绍了身份证合法性校验规则。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 身份证构成说明:
  • 身份证合法性校验规则

 

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

第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文章来源地址https://www.toymoban.com/news/detail-422940.html

到了这里,关于身份证合法性校验规则的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ViewUI表格Table嵌套From表单-动态校验数据合法性的解决方法

    项目需求:在表格中实现动态加减数据,并且每行表格内的输入框,都要动态校验数据,校验不通过,不让提交数据,并且由于表格内部空间较小,我仅保留红边框提示,文字提示给隐藏了,不然表格内的框会很大很难看。 如果,你需要提示的话,不要 show-message 属性 提示:

    2024年02月13日
    浏览(45)
  • 常用的表单校验规则——邮箱/QQ/身份证号码/微信/电话/数字字母/整数/文本/密码等

    1.邮箱校验规则 2.邮箱校验规则  3.QQ校验规则 4.身份证号码校验规则   5.微信校验规则 6.电话校验规则  7.银行卡号校验规则  8.数字字母校验规则  9.整数校验规则  10.数字校验规则  11.文本校验规则  12.密码校验规则  最后附上 rules 中的使用方法             

    2024年02月05日
    浏览(57)
  • uniapp、vue、小程序常用的一些验证规则校验方法(例如:手机号。身份证、金额等)

    例如: 检查是否为空数组 、是否是空  不为空false 为空true、校验密码、校验手机号格式、校验邮箱格式、校验身份证号格式、校验值长度 不少于6位数、 电话号码加密   15288889999 转化为 152****9999、身份证号码加密、验证输入重量、金额等类型   例如 0.11  2.23  100.123等等

    2024年02月02日
    浏览(55)
  • java实现身份证号码校验

    校验规则为:前17位每一位乘以一个固定权重并相加然后除以11得到的余数,判断余数是否和校验的数相等 代码实现(支持15位身份证转18位) IdCardCheckUtils NativePlace 输出结果为:

    2024年02月16日
    浏览(249)
  • 检测判断IP合法性API接口

    一款免费的帮助你检测判断IP合法性API接口 重要提示:建议使用https协议,当https协议无法使用时再尝试使用http协议 请求方式: POST 序号 参数 是否必须 说明 1 ip 是 需要检测的IP 2 appKey 是 唯一验证AppKey, 可前往官网“个人中心“获取(http(s): //luckycola.com.cn), 下面具体介绍获取方法

    2024年02月05日
    浏览(59)
  • 使用栈检查括号的合法性 C 实现

    使用栈检查括号的合法性 思路讲解:首先从数组数组0下标开始,如果是左括号直接无脑 压入栈 ,直到出现右括号开始判断合法与否。遇到右括号分两种情况, 第一种 是空栈的情况,也就是说我们第一个字符就是右括号,那么我们可以直接判定为非法,返回false退出; 第二

    2024年02月09日
    浏览(50)
  • 身份证号码,格式校验:@IdCard(Validation + 原生实现校验逻辑)

    自定义一个用于校验 身份证号码 格式的注解 @IdCard ,能够和现有的 Validation 参数校验机制兼容,使用方式和其他校验注解保持一致(使用 @Valid 注解接口参数)。 本文使用原生方式实现校验逻辑,校验规则的实现较为基础;Hutool工具提供了更加完善的校验工具,可以考虑使

    2024年02月07日
    浏览(47)
  • keycloak~使用jwks验证token的合法性

    keycloak提供了jwks服务,其地址可以在 /auth/realms/fabao/.well-known/openid-configuration 的返回结果中找到, jwks_uri 它表示了公钥的颁发者,可以使用颁发出来的公钥来验证token的签名,基地址也是固定的 /auth/realms/fabao/protocol/openid-connect/certs 。 jwt的解析以来于 java-jwt 包,由jwks服务解析

    2024年04月23日
    浏览(31)
  • android 校验用户名密码手机邮箱身份证邮编等

    /** 校验用户名判断:头部尾部不能使空格,不能是中文,不能使全角,不能有星号,长度6-16 其实 中文 和 全角 的 new String(charStr.getBytes(“UTF-8”),“8859_1”).getBytes().length=6 字母、数字、特殊符号new String(charStr.getBytes(“UTF-8”),“8859_1”).getBytes().length=1 */ public static boolean val

    2024年04月25日
    浏览(52)
  • android 校验用户名密码手机邮箱身份证邮编等(1)

    Pattern pattern1 = Pattern.compile(“[^u4E00-u9FA5]*”); // 不是中文 Matcher m1 = pattern1.matcher(username); if (!m1.matches()) { return false; } /** 不能有*号 */ pattern1 = Pattern.compile(“[^ ] ”); // 不是*号 m1 = pattern1.matcher(username); if (!m1.matches()) { return false; } /** 不能是纯数字 */ pattern1 = Pattern.compile(“ 1

    2024年04月25日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包