Java实现身份证校验算法

身份证校验码算法详解:从原理到Java/JavaScript双语言实现 本文详细解析了身份证校验码算法的原理,包括加权因子设计和模运算映射,并提供了Java和JavaScript双语言实现方案。通过对比两种语言的代码实现,帮助开发者构建跨平台的一致性校验方案,适用于前端和后端开发场景。 阅读详情
public class ValidateNumberId {
	
	private static String[]  validtable =  {"1","0","X","9","8","7","6","5","4","3","2"};
	
	public static boolean cleckIdNumber(String ID){
		boolean flag = false;
		//验证码
		String validatecode = ID.substring(17,18);
		//前17位称为本体码
		String selfcode = ID.substring(0,17);
		String code[]=new String[17];
		for(int i=0;i<17;i++){
			code[i] = selfcode.substring(i,i+1);
		}
		//加权因子公式:2的n-1次幂除以11取余数,n就是那个i,从右向左排列。
		int sum = 0;   //用于加权数求和
		for(int i=0;i<code.length;i++){
			//计算该位加权因子
			int yi = adjustmentfactor(i+1)%11;
			//得到对应数位上的数字
			int count = Integer.parseInt(code[code.length-i-1]);
			//加权求和 
			sum +=(count*yi);
		}
	    //验证校验码是否正确
		String valdate = validtable[sum%11];
		if(valdate.equalsIgnoreCase(validatecode)) {
			flag = true;
		}
		return flag;
	}
	/**
	* 计算身份证数位数字加权因子
	* digit表示数位
	*/
	public static int adjustmentfactor(int digit){
		int sum = 1;
		for(int i=0;i<digit;i++){
		    //sum=sum*2;
			sum=sum<<1;
		}
		return sum;
	}
	
	public static void main(String[] args) {
		System.out.println(System.currentTimeMillis());
		System.out.println(cleckIdNumber("身份证号码"));
		System.out.println(System.currentTimeMillis());
	}
}
Java实现身份证验证:从正则到校验码算法与HTTP服务设计 身份证验证是业务系统中常见的校验需求,其核心在于通过国标GB 11643定义的编码规则和ISO 7064:1983 MOD 11-2校验算法,判断号码的数学合法性与业务可信性。加权因子与模11运算能有效拦截大部分伪造号码,而出生日期、地区码等业务规则进一步确保数据合理。在Java后端开发中,分层校验设计可提升代码健壮性,结合HTTP接口与限流防刷机制,能构建高可用的验证服务。本文围绕身份证验证的算法原理与工程实践,提供可落地的Java实现方案,并分享实际项目中的避坑经验。 阅读详情

相关推荐

身份证校验码算法详解:从规则到 Java 代码实现的完整推导

本文详细解析了18位身份证校验码的生成算法,基于ISO 7064:1983.MOD 11-2标准,从数学原理到Java代码实现,提供了完整的验证方案。内容包括加权因子设计、模11运算机制及校验码映射表,并展示了Java实现的核心算法和性能优化技巧,帮助开发者高效处理身份证验证需求。

weixin_30376083的博客 365

java实现身份证号码校验

java实现身份证号码校验

yushun的博客 1万+

ISO 7064校验码算法深度解析:从身份证到IBAN的Java/Python实现

校验码是数据完整性的基础保障技术,其核心原理是通过在原始数据后附加基于特定数学规则计算出的校验位,形成具备自校验能力的编码。该技术主要依赖模运算和精心设计的权值系统,通过计算整个编码对特定模数(如质数11或97)取余的结果是否满足预定条件,来高效检测数据传输或录入过程中的常见错误,如单字符替换和相邻字符换位。其技术价值在于以极低的存储和计算成本,大幅提升数据的可靠性与准确性,是金融交易、身份认证和商品流通等关键业务中不可或缺的安全防线。本文以国际标准ISO 7064为例,深入剖析了其MOD 11-2(应用于

weixin_31240035的博客 255

Java校验身份证算法

【代码】Java校验身份证算法。

xu_hui123的博客 1005

从银行账号到身份证:ISO 7064校验算法全解析(附Java/Python实现对比)

本文深入解析了ISO 7064校验算法,特别是其核心的MOD 11-2算法。该算法广泛应用于中国居民身份证和银行账号校验,通过加权求和与取模运算确保数据完整性。文章对比了其在金融与政务场景下的应用差异,并提供了可直接用于生产环境的Java与Python实现代码,帮助开发者构建高可靠性系统。

weixin_29288313的博客 101

蓝桥杯2012省赛——身份证(Java实现)

问题描述: 如果让你设计个程序,用什么变量保存身份证号码呢?长整数可以吗?不可以! 因为有人的身份证最后一位是"X" 实际上,除了最后一位的X,不会出现其它字母! 身份证号码18位 = 17位 + 校验码 校验码的计算过程: 例如:身份证前17位 = ABCDEFGHIJKLMNOPQ A~Q 每位数字乘以权值求和(每位数字和它对应的“权”相乘后累加) 17位对应的权值分别是: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 求出的总和再对11求模 然后按下表映射: 请编程实现对身

KJ.JK 458

java验证身份证号码是否正确。(带校验算法)

验证身份证号码是否正确。(带校验算法)题目代码 题目 题目内容: 输入一个字符串,请判断是否满足身份证基本要求,并返回具体的生日yyyy-mm-dd。如果输入数据有误,请输出0000-00-00。基本要求是:a)必须是18位;b) 前面位数必须是数字,最后一位可以是数字或小写字母;c) 日期是存在的;d)最后一位校验码检查。 校验码规则如下: 1、将前面的身份证号码17位数分别乘以不同的系数。从第...

qq_38971856的博客 9765

Java身份证号码校验算法详解与实现.zip

校验码是身份证号码中用于检测号码正确性的一个重要组成部分。它的存在主要是为了确保身份信息在生成、存储、传输和使用过程中不会出现错误。通过使用特定的算法,校验码可以有效地识别出身份证号码中的错误和异常,提高数据的准确性和可靠性。对于数据处理系统来说,校验码机制是一种成本相对低廉而有效的错误预防手段。在身份证号码中,校验码位于号码的最末尾,是通过对前面的身份证号码进行计算得出的。校验码的使用能够帮助系统快速判断身份信息的输入是否合法,减少因输入错误导致的问题。

weixin_36382073的博客 1242

java算法之身份证号码验证

http://blog.youkuaiyun.com/jason0539/article/details/10248699 调用时直接 new IDCard().verify(身份证id);就可以了 实现代码如下: [java] view plain copy print? public class IDCard {          private String 

阳光灿烂的日子的博客 755

java实现的18位身份证格式验证算法.

公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

第十一届全国大学生GIS应用技能大赛——广西区域发展布局示意图

我们需要制作一幅广西区域发展布局示意图,最终成图参考“数据”文件夹中的广西区域发展布局示意图.png。地图使用的投影坐标系是 Asia_North_Albers_Equal_Area_Conic,其中地理坐标系是China_Geodetic_Coordinate_System_2000,中央经线东经 105°,标准纬线是北纬 25°和北纬 47°,出图比例尺 1:4,780,000。

@HNUSTer的博客 7802

JAVA 身份证号码的验证

首先我们得出前17位的乘积和【(57)+(39)+(010)+(15)+(08)+(24)+(12)+(91)+(26)+(03)+(07)+(59)+(010)+(85)+(08)+(14)+(1*2)】是189,然后用189除以11得出的结果是189/11=17----2,也就是说其余数是2。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。其分别对应的最后一位身份证的号码为1-0-X -9-8-7-6-5-4-3-2。以上部分内容来自百度百科。

比起日出,我更喜欢日落。我的意思是比起遇见你,我更喜欢与你终老 2035

如何利用东南大学齿轮箱数据集进行故障诊断?从数据采集到模型训练全流程解析

本文详细解析如何利用东南大学齿轮箱数据集进行故障诊断,涵盖从数据采集到模型训练的全流程。通过信号预处理、特征工程构建及多种机器学习模型对比,帮助开发者高效实现工业设备健康管理。特别适合希望将AI技术应用于工业场景的Python开发者。

m2n3b4v5c6的博客 381

java实现身份证校验算法与介绍详解

Java代码实现15位身份证或18位身份证检验算法 提前声明: ----此文用于记录笔记,以及提供给需要的伙伴参考借鉴~ ----本人于网络借鉴各位大牛的方法参考总结如下,均有本人的一些总结,如有冒犯,还请原谅~ ================================================================谢谢!!! 由于我们大家需要对身份证进行校验 ,首先要了解的是身份证中的各位数字的意义代表什么,此处借鉴一位网友 @从头再来好风彩 提供图片,非常感谢!详细的 介绍了身份

weixin_44586831的博客 1724

RAD Studio 12安装全攻略:从下载到破解InterBase的完整流程(附KeyPatch使用技巧)

本文提供RAD Studio 12的完整安装指南,包括系统要求、安装步骤及InterBase数据库的高效配置方法。详细介绍了如何使用KeyPatch工具进行许可证处理,并分享了IDE优化和开发技巧,帮助开发者快速上手这一强大的跨平台开发工具。

q6r7s8t9的博客 952

保姆级教程:在Rockchip RK3588 SDK中,如何为你的新硬件板子创建第一个DTS文件

本文提供在Rockchip RK3588 SDK中为自定义硬件创建首个DTS文件的详细教程。通过分析DTS在RK3588开发中的角色、快速定位参考设计、实操步骤及调试验证方法,帮助开发者高效完成硬件板级配置,特别适合嵌入式Linux系统开发者参考。

weixin_28678831的博客 289

Java实现身份证算法校验

每一个身份证号码,都不是胡乱随机生成的,而是按照国家的规定,有规则的生成的,具体规则点击这里查看。我们校验用户的身份证输入,仅靠简单的位数判断、正则校验是达不到测试要求的,因此就需要根据国家的规定,把身份证的生成规则转变为算法,通过算法来校验用户的输入是否合法:如果为合法,则将用户信息提交相关部门进行真实性验证。 下面废话少说,直接上工具类。因为我的项目为Android项目,用到了Log输出,如...

YoungHong1992 6101

第二十三章 Nest集成日志框架Winston

Winston是一个非常流行的Node.js日志框架,而Nest.js是一个基于Node.js的后端框架。修改 winston.module.ts 内容如下 添加 forRoot 方法,接收 winston 的 createLogger 方法的参数,返回动态模块的 providers、exports。这里用到了 printf 的 format 函数,它可以自定义打印的日志格式 且使用了chalk 加上了颜色,并且打印了 dayjs 格式化的时间。可以看到控制台打印了自定义的 logger 的自定义。

枫ゞ的博客 1071

身份证校验码算法详解:从Java代码到数学原理,手把手教你实现最后一位验证

本文详细解析了身份证校验码的数学原理与实现方法,涵盖Java和Python的多语言代码示例。通过加权因子设计和模11运算,手把手教你如何验证身份证最后一位校验码,适用于前端和Java开发者的实际应用场景。

weixin_30216561的博客 404

世界职业院校技能大赛—人工智能赛道项目逐字稿参考十二

世界职业院校技能大赛—人工智能赛道项目逐字稿参考十二

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 149

Yolov5自定义图片训练测试及模型调优(详细过程)

Yolov5自定义数据训练及测试1. 图像数据获取、标注2. 数据集划分及准备3. 配置训练参数,准备训练:3.1 修改data/训练配置xxx.yaml文件:3.2 修改models模型配置xxx.yaml文件4. 开始训练5. 测试训练后的模型: 1. 图像数据获取、标注 如果自定义训练自己的数据集,首先需要数据标注,至于数据来源可以是下载现有的开发数据集、拍照、爬虫等等。 如果是拍照、爬虫等获取的数据图片,需要进行数据标注,这个过程可以使用工具来做,但也需要一些手动操作 。。并且图片越多越好,如果

HowieXue 薛永浩的博客 10万+

身份证校验码(最后一位)的算法详解与Java实现:从原理到工具类封装

本文详细解析了身份证校验码的算法原理与Java实现,包括模11加权校验算法的数学特性、基础Java工具类封装及高并发优化策略。通过内存优化、并行计算和缓存技术提升性能,适用于金融支付、电商实名认证等场景,确保千万级QPS下的高效验证。

weixin_30764771的博客 508

C#上位机+YOLO实时目标检测:摄像头采集+多线程推理+精度调优全流程

标注数据集:使用LabelImg工具标注目标对象,按YOLO格式整理数据集;模型训练:使用Ultralytics库训练自定义模型,提升特定目标的检测精度;训练参数优化:增加训练轮数(epochs=100200)、调整批次大小(batch=1632)、使用数据增强(flip、mosaic等)。摄像头采集:封装通用采集类,支持USB摄像头/网口相机,实现稳定帧读取与异常处理;多线程推理:采用“采集线程+推理线程+UI线程”解耦架构,使用线程安全队列传递帧数据,彻底解决界面卡顿;核心封装。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 676

身份证号码校验算法 java实现

import java.util.Scanner;public class CheckoutID {int[] weight = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 }; // 十七位数字本体码权重 char[] validate = { '1', '0', 'X', '9', '8', '7', '6', '5', '4',

我本亲狂的博客 2615

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

PAT 1031 查验身份证 (15分)(Java)

题目描述   一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:   首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值: Z:0 1 2 3 4 5 6 7 8 9 10 M:1 0 X 9 8 7 6 5 4 3 2...

HenryLei的博客 2万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java身份证号码严格验证(第18位校验码算法实现)

/** * 身份证号码的格式:610821-20061222-612-X 由18位数字组成:前6位为地址码,第7至14位为出生日期码,第15至17位为顺序码, * 第18位为校验码。检验码分别是0-10共11个数字,当检验码为“10”时,为了保证公民身份证号码18位,所以用“X”表示。虽然校验码为“X”不能更换,但若需全用数字表示,只需将18位公民身份号码转换成15位居民身份证号码,去掉第7至8位和最后1位3个数码。 * 当今的身份证号码有15位和18位之分。1985年我国实行居民身份证制度,当时签.

Mars_xiaotao的博客 1840

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

上一篇: 找出数组中左加和等于右加和的数字
下一篇: 交叉匹配算法
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值