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

深度强化学习 | 基于DQN实现Flappy Bird游戏与分析 在Flappy Bird中,玩家需要通过控制小鸟安全穿过随机长度的水管来得分。本文基于深度Q网络DQN来实现Flappy Bird游戏的自主探索与学习 阅读详情

身份证验证规则

1、号码的结构
    公民身份号码是特征组合码,由十七位数字本体码和一位校
验码组成。排列顺序从左至右依次为:六位数字地址码,八位数
字出生日期码,三位数字顺序码和一位数字校验码。
    2、地址码
    表示编码对象常住户口所在县(市、旗、区)的行政区划代码,
按GB/T2260的规定执行。
    3、出生日期码
    表示编码对象出生的年、月、日,按GB/T7408的规定执行,
年、月、日代码之间不用分隔符。
    4、顺序码
    表示在同一地址码所标识的区域范围内,对同年、同月、同
日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配
给女性。
    5、校验码
    (1)十七位数字本体码加权求和公式
    S = Ai * Wi, i = 2, ... , 18
    Y = mod(S, 11)
    i: 表示号码字符从右至左包括校验码字符在内的位置序号
    Ai:表示第i位置上的身份证号码字符值
    Wi:表示第i位置上的加权因子
    i: 18 17 16 15 14 13 12 11 10 9 8 7  6 5 4 3 2 1
    Wi: 7  9 10  5  8  4  2  1  6 3 7 9 10 5 8 4 2 1
    (2)校验码字符值的计算
    Y:      0 1 2 3 4 5 6 7 8 9 10
    校验码: 1 0 X 9 8 7 6 5 4 3  2
    四、举例如下:
    北京市朝阳区:  11010519491231002X
    广东省汕头市:  440524188001010014

15位的身份证号
dddddd yymmdd xx p
18位的身份证号
dddddd yyyymmdd xx p y
其中dddddd为地址码(省地县三级)18位中的和15位中的不完全相同
yyyymmdd yymmdd 为出生年月日
xx顺号类编码
p性别
18位中末尾的y为校验码,在网上可以找到算法
将前17位的ascii码值经位移、异或运算结果不在0-9的令其为x

下面是java实现的代码
/*
* IDCard.java Created on 2004-11-5 17:03:37
*
*/
package org.yz21.study.idcard;
/**
* @author violin 2004-11-5 17:03:37
* Copyright www.yz21.org 2003-2004
*/
public class IDCard {
// wi =2(n-1)(mod 11)
final int[] wi = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1};
// verify digit
final int[] vi = {1,0,'X',9,8,7,6,5,4,3,2};
private int[] ai = new int[18];
public IDCard() {
}
//verify
public boolean Verify(String idcard) {
if (idcard.length() == 15) {
idcard = uptoeighteen(idcard);
}
if (idcard.length() != 18) {
return false;
}
String verify = idcard.substring(17, 18);
if (verify.equals(getVerify(idcard))) {
return true;
}
return false;
}
//get verify
public String getVerify(String eightcardid) {
int remaining = 0;
if (eightcardid.length() == 18) {
eightcardid = eightcardid.substring(0, 17);
}
if (eightcardid.length() == 17) {
int sum = 0;
for (int i = 0; i < 17; i++) {
String k = eightcardid.substring(i, i + 1);
ai = Integer.parseInt(k);
}
for (int i = 0; i < 17; i++) {
sum = sum + wi * ai;
}
remaining = sum % 11;
}
return remaining == 2 ? "X" : String.valueOf(vi[remaining]);
}
//15 update to 18
public String uptoeighteen(String fifteencardid) {
String eightcardid = fifteencardid.substring(0,6);
eightcardid = eightcardid + "19";
eightcardid = eightcardid + fifteencardid.substring(6,15);
eightcardid = eightcardid + getVerify(eightcardid);
return eightcardid;
}
}

测试代码:
使用的单元测试工具是junit

/*
* IDCardTest.java Created on 2004-11-5 17:32:12
*
*/
package org.yz21.study.idcard;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* @author violin 2004-11-5 17:32:12
* Copyright www.yz21.org 2003-2004
*/
public class IDCardTest extends TestCase {
private String idcard1 = "11010519491231002X";
private String idcard2 = "440524188001010014";
public void testVerify() {
IDCard idcard = new IDCard();
this.assertTrue(idcard.Verify(idcard1));
this.assertTrue(idcard.Verify(idcard2));
}
public static Test suite() {
return new TestSuite(IDCardTest.class);
}
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
}
 
【深度学习基础】多任务学习(Multi-Task Learning) 多任务学习(Multi-task learning)是和单任务学习(single-task learning)相对的一种机器学习方法。在机器学习领域,标准的算法理论是一次学习一个任务,也就是系统的输出为实数的情况。复杂的学习问题先被分解成理论上独立的子问题,然后分别对每个子问题进行学习,最后通过对子问题学习结果的组合建立复杂问题的数学模型。多任务学习是一种联合学习,多个任务并行学习,结果相互影响。一次只学习一个任务(task),大部分的机器学习任务都属于单任务学习。 阅读详情

相关推荐

【Java】身份证的验证

题目要求:输入18位的身份证号码,要求首先验证身份证号码合法性(仅利用校验位验证),如果合法则输出性别和出生日期。说明:(1)身份证号码的7~12位表示出生年月;第17位表示性别,奇数为男,偶数为女;最后一位为校验位(2)校验算法:将前面的身份证号码17位数加权求和(系数分别7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2),然后除以11,根据余数找到对应的校验位(分别为1、...

wyz0516071128的博客 1084

STC8H DMA 串口1全双工中断方式收发通讯C语言

串口1全双工中断方式收发通讯程序。 通过PC向MCU发送数据, MCU将收到的数据自动存入DMA空间. 当DMA空间存满设置大小的内容后,通过串口1的DMA自动发送功能把存储空间的数据原样返回. 用定时器做波特率发生器,建议使用1T模式(除非低波特率用12T),并选择可被波特率整除的时钟频率,以提高精度。

czhaii的专栏 1467

通过18位身份证号输出出生年月日java

import java.util.Scanner; public class B { public static void main(String []args) { Scanner sc=new Scanner(System.in); String s; s=sc.next(); getf(s); } public...

Pharaoh_yd的博客 3329

GPS定位不准?可能是GDOP在作怪!手把手教你优化卫星几何分布

本文深入解析了GPS定位精度不佳的常见原因——几何精度因子GDOP。通过剖析卫星几何分布对定位误差的放大效应,文章提供了从理解GDOP、PDOP、HDOP等关键指标,到使用专业APP实时诊断卫星天空图,再到利用在线工具提前规划最佳定位时机的完整实战指南。旨在帮助户外爱好者、无人机飞手及专业用户主动优化卫星几何条件,从而显著提升定位可靠性。

weixin_29062823的博客 306

第七章 Wi-Fi连接过程

系列文章目录 第一章 国内下载AOSP最新源码的方法 第二章 下载AOSP WiFi相关的代码 第三章 将源码导入Android Studio(无需编译idegen) 文章目录系列文章目录前言一、Wi-Fi连接是什么?二、Wi-Fi连接的过程1. 手动连接总结 前言 Wi-Fi连接分为下面几种过程,每种的流程都有些许差异: 手动连接 自动连接 在BSS之间漫游 Passpoint热点连接 一、Wi-Fi连接是什么? Wi-Fi连接是指STA(手机)连接到AP(无线路由器)的过程,这个过程分为链路

Frank.Zhang的专栏 2527

从控制台接收输入的身份证号码位数(Java语言)

从控制台接收输入的身份证号码位数(Java语言)

DeityABC的博客 357

Transformer实战(32)——Transformer模型压缩

在本节中,我们学习了如何在硬件资源受限的情况下减轻运行大模型的负担。我们介绍了如何通过蒸馏、剪枝和量化从训练好的模型中提取高效模型。预训练轻量级的通用语言模型(如 DistilBERT) 可以在各种任务上进行微调,并表现出与非蒸馏模型相当的性能。随着数据量的不断增加,我们希望模型能够更快地运行,在这方面,高效 Transformer 起着至关重要的作用。

盼小辉丶的博客 2592

java代码实现身份证第18位的计算和验证身份证号码是否是真实有效.

一、身份证第18位(校验码)的计算方法 :  1、将前面的身份证号码17位数分别乘以不同的系数。 从第一位到第十七位的系数分别为: 7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。   2、将这17位数字和系数相乘的结果相加。   3、用加出来和除以11,看余数是多少?   4、余数只可能有 0-1-2-3-4-5-6-7-8-9-10这11个数字。 其分别

jun18274761951的博客 6354

YOLOv11【第三章:高阶应用与落地篇·第7节】多任务联合训练(Multi-Task Learning):检测+分割+关键点三头并进!

🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。

**My Coding Family** 730

【全志V821_FoxPi】6-2 IMX219 MIPI摄像头适配

全志V821芯片适配IMX219 MIPI摄像头(2lane)教程,基于FoxPi开发板V1.2 SDK。文章详细介绍了IMX219的技术参数(800万像素、1/4英寸CMOS、支持1080P@30fps输出)及模组接口原理图。重点展示了设备树配置方法,包括PIO引脚定义(TWI0使用PA3/PA4,复位引脚PA2)、TWI0节点设置(100kHz时钟)以及VIND0节点中sensor0的完整配置(I2C地址0x20、MCLK0、RAW格式输出等)。配置过程强调需注意IMX219的器件地址转换(0x10→0

第四维度的博客 2255

java字符串应用之18位身份证格式验证

    公民身份号码是特征组合码,由17位数字本体码和1位数字校验码组成。排列顺序从左至右依次为:6位数字地址码、8位数字出生日期码,3位数字顺序码和1位数字校验码。    地址码:表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按 GB/T 2260的规定执行。    出生日期码:表示编码对象的出生年、月、日,按GB/T 7408的规定执行。    顺序码:表示在同一地址码所标识的区域范

上善若水 3888

ArcMap|时空地理加权回归(GTWR)

ArcGIS的GTWR插件下载地址:https://www.researchgate.net/publication/329518786_GTWR_ADDIN_Valid_till_Dec_31_2022 更详细的操作参考: https://www.bilibili.com/video/BV1fR4y1M7xB?spm_id_from=333.999.0.0 https://blog.youkuaiyun.com/weixin_40008135/article/details/112693520 双击“GTWR_Be

个人学习笔记 1万+
上一篇: web.xml详解
下一篇: Java Annotation入门
lhminjava
博客等级 码龄21年 15粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值