身份证验证之简单校验

用正则表达式校验身份证号码及验证详解 根据上述地址码做身份证号码的前两位校验,进一步的提高准确率。在做用户实名验证时,常会用到身份证号码的正则表达式及校验方案。本文列举了两种验证方案,大家可以根据自己的项目实际情况,选择适合的方案。华东: 上海31,江苏32,浙江33,安徽34,福建35,江西36,山东37。华北:北京11,天津12,河北13,山西14,内蒙古15。西南: 四川51,贵州52,云南53,西藏54,重庆50。西北: 陕西61,甘肃62,青海63,宁夏64,新疆65。根据方案1的不足,引入方案2进而改进方案1的不足。 阅读详情
import java.util.Calendar;
import java.util.Scanner;

public class ValidateID {
   /*
     * 我国现行使用公民身份证号码有两种尊循两个国家标准,〖GB 11643-1989〗和〖GB 11643-1999〗。
     * 〖GB 11643-1989〗中规定的是15位身份证号码:排列顺序从左至右依次为:六位数字地址码,六位数字出生日期码,三位数字顺序码,其中出生日期码不包含世纪数。
     * 〖GB 11643-1999〗中规定的是18位身份证号码:公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。
     * 排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
     * 地址码:表示编码对象常住户口所在县(市、旗、区)的行政区划代码。
     * 出生日期码:表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。
     * 顺序码:表示同一地址码所标识的区域范围内,对同年、同月、同日出生的人员编定的顺序号。
     * 顺序码的奇数分给男性,偶数分给女性。
     * 校验码:是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。
     */
    
    // 记录信息
    private String info = "地区:";

    public static void main(String[] args) {
        new ValidateID().validateId();
    }

    public void validateId() {

        System.out.println("输入身份证号码:");
        Scanner sc = new Scanner(System.in);
        String id = sc.nextLine();
        // 判断是不是18位数字
        if (id.length() != 18) {
            System.out.println("输入的位数不对");
            return;
        }
        // 如果含有非数字,则直接返回退出
        try {
            Long.parseLong(id);
        } catch (Exception e) {
            System.out.println("输入非数字");
            return;
        }

        // 身份证代表省份的数字
        int shengfen = Integer.parseInt(id.substring(0, 2));
        
        //判断是否有该省份,有则获得相应信息
        if(!isArea(shengfen)){
            System.out.println("省份不对");
            return;
        }

        // 获得身份证年份
        int nianfen = Integer.parseInt(id.substring(6, 10));
        info += "出生日期:" + nianfen + "年";
        // 获得日期实例
        Calendar rightNow = Calendar.getInstance();
        // 获得当前年份
        int MaxYear = rightNow.get(Calendar.YEAR);
        if ((nianfen < 1949) && (nianfen > MaxYear)) {
            System.out.println("年份不对");
            return;
        }
        // 获得身份证月份
        int yuefen = Integer.parseInt(id.substring(10, 12));
        info += yuefen + "月";
        // 判断月份是否正确
        if ((yuefen <= 0) && (yuefen > 12)) {
            System.out.println("月份错误");
            return;
        }
        // 获得身份证日期
        int riqi = Integer.parseInt(id.substring(12, 14));
        info += riqi + "日";
        // 判断日期是否正确
        if (riqi <= 0 && riqi > 31) {
            System.out.println("日期错误");
            return;
        }
        // 获得身份证性别数字
        int sex = Integer.parseInt(id.substring(16, 17));
        // 奇数为男,偶数为女
        if (sex % 2 == 0) {
            info += "   性别:女";
        } else {
            info += "   性别:男";
        }
      
        System.out.println("该身份证通过验证");
        // 打印身份证信息
        System.out.println("信息如下");
        System.out.println(info);
    }
    
    //判断该省份,并获得省份信息
    public boolean isArea(int shengfen){
        // 判断该省份是否存在,其中下列代码代表不同省份,可到网上查找获得
        if (!((shengfen == 11) || (shengfen == 12) || (shengfen == 13)
                || (shengfen == 14) || (shengfen == 15) || (shengfen == 21)
                || (shengfen == 22) || (shengfen == 23) || (shengfen == 31)
                || (shengfen == 32) || (shengfen == 33) || (shengfen == 34)
                || (shengfen == 35) || (shengfen == 36) || (shengfen == 37)
                || (shengfen == 41) || (shengfen == 42) || (shengfen == 43)
                || (shengfen == 44) || (shengfen == 45) || (shengfen == 46)
                || (shengfen == 50) || (shengfen == 51) || (shengfen == 52)
                || (shengfen == 53) || (shengfen == 54) || (shengfen == 61)
                || (shengfen == 62) || (shengfen == 63) || (shengfen == 64)
                || (shengfen == 65) || (shengfen == 71) || (shengfen == 81) || (shengfen == 82))) {
            System.out.println("省份不对");
            return false;
        }
        
        if (shengfen == 11) {
            info += "北京    ";
        }
        if (shengfen == 12) {
            info += "天津    ";
        }
        if (shengfen == 13) {
            info += "河北    ";
        }
        if (shengfen == 14) {
            info += "山西    ";
        }
        if (shengfen == 15) {
            info += "内蒙古    ";
        }
        if (shengfen == 21) {
            info += "辽宁    ";
        }
        if (shengfen == 22) {
            info += "吉林    ";
        }
        if (shengfen == 23) {
            info += "黑龙江    ";
        }
        if (shengfen == 31) {
            info += "上海    ";
        }
        if (shengfen == 32) {
            info += "江苏    ";
        }
        if (shengfen == 33) {
            info += "浙江    ";
        }
        if (shengfen == 34) {
            info += "安徽    ";
        }
        if (shengfen == 35) {
            info += "福建    ";
        }
        if (shengfen == 36) {
            info += "江西    ";
        }
        if (shengfen == 37) {
            info += "山东    ";
        }
        if (shengfen == 41) {
            info += "河南    ";
        }
        if (shengfen == 42) {
            info += "湖北    ";
        }
        if (shengfen == 43) {
            info += "湖南    ";
        }
        if (shengfen == 44) {
            info += "广东    ";
        }
        if (shengfen == 45) {
            info += "广西壮族自治区    ";
        }
        if (shengfen == 46) {
            info += "海南    ";
        }
        if (shengfen == 50) {
            info += "重庆    ";
        }
        if (shengfen == 51) {
            info += "四川    ";
        }
        if (shengfen == 52) {
            info += "贵州    ";
        }
        if (shengfen == 53) {
            info += "云南    ";
        }
        if (shengfen == 54) {
            info += "西藏自治区    ";
        }
        if (shengfen == 61) {
            info += "陕西    ";
        }
        if (shengfen == 62) {
            info += "甘肃    ";
        }
        if (shengfen == 63) {
            info += "青海    ";
        }
        if (shengfen == 64) {
            info += "宁夏回族自治区    ";
        }
        if (shengfen == 65) {
            info += "新疆维吾尔族自治区    ";
        }
        if (shengfen == 71) {
            info += "台湾    ";
        }
        if (shengfen == 81) {
            info += "香港特别行政区    ";
        }
        if (shengfen == 82) {
            info += "澳门特别行政区    ";
        }
        return true;
    }

}


万达电影 com.wandafilm.app headers check 万达电影 安卓逆向 抓包 逆向 check 阅读详情

相关推荐

Vivado2023.2与Vitis协同开发:从Hello World到BOOT.BIN的完整流程解析

本文详细解析了使用Vivado 2023.2与Vitis协同开发ZYNQ/MPSoC平台的完整流程。从环境安装、硬件设计、软件编写、在线调试到生成独立的BOOT.BIN启动文件,手把手指导开发者完成从Hello World到系统固化的全步骤,并提供了常见问题的避坑指南,帮助初学者快速掌握软硬件协同开发的核心技能。

weixin_29197051的博客 176

判断身份证号码的正确性源码

判断身份证号码的正确性源码根据〖中华人民共和国国家标准GB11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码。生日期

hbqjzx的专栏 2713

每天一个优秀提示词学习收藏 - 文本创作篇(二)

宝子们,今天不藏私啦!我把这段时间四处搜罗、潜心钻研出来的文本创作 Prompt 提示词大礼包双手奉上,这可都是能让你的 AI 创作水平原地起飞的干货!走过路过不要错过,赶紧码住,开启你的 AI 创作进阶之旅吧!

2401

身份证号码相关知识

<br /><br />身份号码是特征组合码,由十七位数字本体码和一位校验码组成。<br />排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。<br />身份证地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。<br />身份证出生日期码表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。<br />身份证顺序码表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号

wangjingboasp的专栏 6127

STM32F4使用CUBEMX ADC定时采样+DMA

STM32、FFT、ADC、TIM

m0_62379750的博客 4222

整车电检工艺流程

本文是笔者在从事汽车行业智能制造领域过程,对于整车电检工艺流程的理解与总结。

qq_40664711的博客 1万+

常用的的身份证校验方法

常用的的身份证中代码的处理……

两点 5556

【27】软考软件设计师——数据流图(DFD)补全题满分精讲|下午15分大题深度拆解

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第27篇,深度精讲**下午案例题第1道必考大题:数据流图(DFD)补全**,该题单题分值高达**12 ~ 15分**,是整张试卷最稳的保底得分大题。我结合多年备考复盘与真题阅卷规则,超详细拆解DFD四大核心元素标准定义、机考绘图规范、三层分层逻辑、**父图子图平衡刚性扣分规则**,升级强化版「DFD满分补全三步法」;复刻历年高频真题完整流程,拆解缺失数据流定位、实体/存储辨析、平衡改错、文字需求对照全流程,配套**阅卷满分答题话术、机考避坑细则

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 589

如何免费进行身份证实名验证核验

身份证实名认证接口API

解决API接口开发的博客 9921

11、气动外形优化中的连续伴随方法

本文探讨了连续伴随方法在气动外形优化中的理论背景、实现和验证过程。通过使用DLR的FLOWer求解器,将伴随方法应用于Euler和Navier-Stokes方程,以高效计算成本函数梯度,从而显著减少优化过程中的计算成本。文章还介绍了该方法在RAE2822翼型和ONERA M6机翼等案例中的应用,并展示了其准确性和效率。未来展望包括扩展到复杂流动模拟和多学科优化。

desk3的博客 167

5. SAP UI5 视图控制器(Controller)初探

本教程的前一个步骤也就是第四个步骤,我们了解了 SAP UI5 XML 视图的使用方法。在该步骤里,我们在 XML 视图里声明了一个 Text 控件实例,该控件位于 sap.m 这个命名空间内。 本步骤会继续接触 SAP UI5 MVC 框架中三大基石的另一块:C - Controller,即控制器。 先看看本步骤完成之后,我们得到的 SAP UI5 应用能实现一个什么样的效果。 访问如下 url: http://localhost:8080/webapp/index.html 能看到一个 Say Hell

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4595

身份证正则表达式

身份证正则表达式 1、简单的正则表达式: (1)preg_match("/^(\d{18,18}|\d{15,15}|\d{17,17}x)/&quot;,/&quot;,/",id_card) (2)preg_match("/^(\d{6})(18|19|20)?(\d{2})([01]\d)([0123]\d)(\d{3})(\d|X)?/&quot;,/&qu...

许达华的博客 1万+

【Python爬虫系列】_005.浏览器开发者工具(详解)

Elements(元素)分析当前页面节点,用来辅助书写BS或者XPath这里面的数据与源代码有区别,不一定准确(避坑)Console(控制台)这个除了查看错误信息、打印调试信息(console.log())、写一些测试脚本以外,还可以当作Javascript API查看用例如我想查看console都有哪些方法和属性,我可以直接在Console中输入"console"并执行后续学js逆向的时候需要用到Sources(源代码)与在网页页面,鼠标右键——查看网页源代码 内容一致。

weixin_50296259的博客 422

【第005篇】vue工具脚本-校验身份证号码是否合法(不是简单验证身份证号码是否15或18位,而是包含了校验位)

/** * 校验身份证号码是否合法 * @param num * @returns {boolean} */ export function isIdCard (num) { if (!num) { return false } num = num.toUpperCase() // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。 if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test

嘉&年华的博客 883

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

15位和18位身份证的正则表达式及其验证

15位和18位身份证的正则表达式及其验证 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 开发工具与关键技术: 作者:罗小龙 撰写时间:2019.1.30 1、简单的正则表达式: (1)preg_match("/^(\d{18,18}|\d{15,15}|\d{17,17}x)$/",$id_card) (2)preg_match("/...

weixin_44560813的博客 2665

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

身份证号验证

1、简单的正则表达式: (1)preg_match("/^(/d{18,18}|/d{15,15}|/d{17,17}x)$/",$id_card) (2)preg_match("/^(/d{6})(18|19|20)?(/d{2})([01]/d)([0123]/d)(/d{3})(/d|X)?$/",$id_card) (3)preg_match("/(^/d{15}$/)|(

a623397674a的专栏 667

18位身份证验证--java实现,正则表达式

简单的正则表达式: (1)preg_match("/^(\d{18,18}|\d{15,15}|\d{17,17}x)$/",$id_card)(2)preg_match("/^(\d{6})(18|19|20)?(\d{2})([01]\d)([0123]\d)(\d{3}) (\d|X)?$/",$id_card)(3)preg_match("/(^\d{15}$/)|(\d{17...

a821048508的博客 832

身份证验证方法

1、简单的正则表达式: (1)preg_match("/^(\d{18,18}|\d{15,15}|\d{17,17}x)$/",$id_card) (2)preg_match("/^(\d{6})(18|19|20)?(\d{2})([01]\d)([0123]\d)(

Feebas 1040

JS验证身份证有效性

页面: 效果为输入身份证号,焦掉移开后自动验证,并返回信息! <input type="text" class="reg_txt" value="身份证号" titles="请输入您的身份证号!" name="userid" id="username" maxlength="40" onfocus="if(this.value=='身份证号'){this.value='';}"

XuJiangDong 1724

验证身份证号是否合法JS

--> 验证身份证号 身份证号:(可以为空) 公司现用判定。已有的身份证号差不多都能给通过,不存在的大部分能给报错....

youngloveheart的专栏 645

身份证号码验证

大陆身份证号验证         function checkDlIdNumber(){                 var idNumber = document.getElementById("idNumber").value;                 if(isStandard(idNumber)){                         alert("

leayefang的专栏 1461

验证身份证

网络上的身份验证很多,如有雷同纯属巧合。呵呵! 我的也是根据网上的一些东西 自己写的一些东东,希望对大家有帮助 1、简单的正则表达式: (1)preg_match("/^(\d{18,18}|\d{15,15}|\d{17,17}x)$/",$id_card)  (2)preg_match("/^(\d{6})(18|19|20)?(\d{2})([01]\d)([0123]\d)

各种学习各种纠结 1807

java简易身份证校验

public static void main(String[] args) {                   int[] intArr = new int[]{7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};                   String[] strArr = new String[]{"1", "0", "

shwanglp的专栏 740

新版身份证校验位算法

资料搜集,供参考 新身份证校验位算法 ftsun 18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999《公民身份号码》中做了明确的规定。 GB11643-1999《公民身份号码》为GB11643-1989《社会保障号码》的修订版,其中指出将原标准名称"社会保障号码"更名为"公民身份号码",另外GB11643-1999《公民身份号码》从实施之日起代替GB11643

航海日志 1074

简单的关于身份证(15位或者18位)合法性验证

简单的关于身份证(15位或者18位)合法性验证

caolipeng_918的专栏 6653
上一篇: 身份证验证之简单校验
下一篇: 身份证验证之校验码算法验证
coollor
博客等级 码龄15年 48粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值