IDCode校验算法
运行地址:
https://c.runoob.com/compile/10
IDCODE校验器官网
算法源码
public class HelloWorld {
public static void main(String []args) {
String code = "MA.156.M0.100009.96006002.S1576130942.P190101.LABS20191201.E191201.V191201.C7";
String[] codeList = code.split("\\.");
String code1 = "";
String code2 = "";
for (int i = 0; i < codeList.length; i++) {
if (i <= 4) {
code1 = code1 + "." + codeList[i];
} else if (i != codeList.length - 1) {
code2 = code2 + "." + codeList[i];
}
}
//去掉最后一个校验位和前边的点
code1 = code1.substring(1, code1.length() - 1);
System.out.println("code:" + code);
System.out.println("/*******************************/");
System.out.println("code1:" + code1);
String code1Num = letter2num(code1) + "Y";
System.out.println("code1Num:" + code1Num);
code1Num = evenNum(code1Num);
System.out.println("evenNum(code1Num):" + code1Num);
int result1 = sumNum(code1Num);
System.out.println("result1:" + result1);
int y = 10 - (result1 % 10);
System.out.println("y:" + y);
code1 = code1 + y;
System.out.println(code1); System.out.println("/*******************************/");
System.out.println("code2:" + code2);
String code2Num = letter2num(code2) + "Z";
System.out.println("code2Num:" + code2Num);
code2Num = evenNum(code2Num);
System.out.println("evenNum(code2Num):" +code2Num);
int result2 = sumNum(code2Num);
System.out.println("result2:" + result2);
int z = 10 - (result2 % 10);
System.out.println("z:" + z);
System.out.println("/*******************************/");
code2 = code2 + ".C" + z;
System.out.println("code2:" + code2);
System.out.println("LAST:" + code1 + code2); } private static String letter2num(String letterStr) {
String num = "";
for (int i = 0; i < letterStr.length(); i++) {
for (letter e : letter.values()) {
if (String.valueOf(letterStr.charAt(i)).equals(e.getLetter())) {
num += e.getNum();
}
}
}
return num;
} private static String evenNum(String numStr) {
String result = "";
numStr = new StringBuffer(numStr).reverse().toString();
for (int i = 1; i <= numStr.length(); i++) {
char num = numStr.charAt(i - 1);
if (i % 2 == 0) {
int numTemp = Integer.valueOf(String.valueOf(num));
numTemp = numTemp * 2;
if (numTemp > 9) {
String numS = String.valueOf(numTemp);
numTemp = Integer.valueOf(String.valueOf(numS.charAt(0))) + Integer.valueOf(String.valueOf(numS.charAt(1)));
}
result = result + numTemp;
} else {
result = result + num;
}
}
return result;
} private static int sumNum(String result) {
result = result.substring(1, result.length());
int c = 0;
int count = result.length();
int[] a = new int[count];
for (int i = 0; i < result.length(); i++) {
a[i] = Integer.valueOf(String.valueOf(result.charAt(i)));
} for (int i = 0; i < a.length; i++) {
c += a[i];
}
return c;
} private enum letter {
To1("A", 10),
To2("B", 11),
To3("C", 12),
To4("D", 13),
To5("E", 14),
To6("F", 15),
To7("G", 16),
To8("H", 17),
To9("I", 18),
To10("J", 19),
To11("K", 20),
To12("L", 21),
To13("M", 22),
To14("N", 23),
To15("O", 24),
To16("P", 25),
To17("Q", 26),
To18("R", 27),
To19("S", 28),
To20("T", 29),
To21("U", 30),
To22("V", 31),
To23("W", 32),
To24("X", 33),
To25("Y", 34),
To26("Z", 35),
To27("a", 36),
To28("b", 37),
To29("c", 38),
To30("d", 39),
To31("e", 40),
To32("f", 41),
To33("g", 42),
To34("h", 45),
To35("i", 46),
To36("j", 47),
To37("k", 48),
To38("l", 49),
To39("m", 50),
To40("n", 51),
To41("o", 52),
To42("p", 53),
To43("q", 54),
To44("r", 55),
To45("s", 56),
To46("t", 57),
To47("u", 58),
To48("v", 59),
To49("w", 60),
To50("x", 61),
To51("y", 62),
To52("z", 63),
To53("0", 0),
To54("1", 1),
To55("2", 2),
To56("3", 3),
To57("4", 4),
To58("5", 5),
To59("6", 6),
To60("7", 7),
To61("8", 8),
To63("-", 64),
To64(".", 65),
To65("@", 66),
To66("$", 67),
To67(",", 68),
To68("*", 69),
To69("+", 70),
To70("%", 71),
To71("/", 72),
To72("#", 73),
To73("!", 74),
To74("^", 75),
To75("~", 76);
private String letter;
private Integer num; letter(String letter, Integer num) {
this.letter = letter;
this.num = num;
} public String getLetter() {
return letter;
} public Integer getNum() {
return num;
}
}
}
输出
code:MA.156.M0.100009.96006002.S1576130942.P190101.LABS20191201.E191201.V191201.C7
/*******************************/
code1:MA.156.M0.100009.9600600
code1Num:22106515665220651000065600600Y
evenNum(code1Num):Y00300616000025304216352530224
result1:65
y:5
MA.156.M0.100009.96006005
/*******************************/
code2:.S1576130942.P190101.LABS20191201.E191201.V191201
code2Num:652815761304265251010165211011282011201651411201653111201Z
evenNum(code2Num):Z204121653102218116204120484120214531010112164403265528453
result2:153
z:7
/*******************************/
code2:.S1576130942.P190101.LABS20191201.E191201.V191201.C7
LAST:MA.156.M0.100009.96006005.S1576130942.P190101.LABS20191201.E191201.V191201.C7
IDCode校验算法的更多相关文章
- 银行卡luhm校验算法
/** * 15位银行卡luhm校验算法 * 1.从卡号最后一位数字开始,逆向将奇数位(1.3.5等等)相加. * 2.从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去 ...
- 数据帧CRC32校验算法实现
本文设计思想采用明德扬至简设计法.由于本人项目需要进行光纤数据传输,为了保证通信质量要对数据进行校验.在校验算法中,最简单最成熟的非CRC校验莫属了. 得出一个数的CRC校验码还是比较简单的: 选定一 ...
- C# 异或校验算法
C# 的异或校验算法 直接上代码 public partial class FormCRC : Form { public FormCRC() { InitializeComponent(); } p ...
- 常用校验算法CRC、MD5、SHA_转
1.算法概述 数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名.数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密.数据摘要算法也被称为哈希(H ...
- C#校验算法列举
以下是工作中常用的几种校验算法,后期将不断更新 和校验 /// <summary> /// CS和校验 /// </summary> /// <param name=&q ...
- CRC校验算法学习
原文:http://www.repairfaq.org/filipg/LINK/F_crc_v31.html 本文根据上述链接原文翻译而来,如有错误,忘广大网友互相帮忙纠正,谢谢! 1.前言: 1.0 ...
- CRC校验算法的实例解析
概念 CRC校验算法,说白了,就是把需要校验的数据与多项式进行循环异或(XOR), 进行XOR的方式与实际中数据传输时,是高位先传.还是低位先传有关.对于数据 高位先传的方式,XOR从数据的高位开 ...
- 银行卡号Luhn校验算法
/** *银行卡号Luhn校验算法 *luhn校验规则:16位银行卡号(19位通用): *1.将未带校验位的 15(或18)位卡号从右依次编号 1 到 15(18),位于奇数位号上的数字乘以 2. * ...
- Java CRC16 MODBUS校验算法实现
/** * CRC校验算法工具类 */ public class CRCUtil { public static String getCRC(String data) { data = data.re ...
随机推荐
- Vue动态修改网页标题
业务需求,进入页面的时候,网页有个默认标题,加载的网页内容不同时,标题需要变更. 例:功能授权,功能授权(张三). Vue下有很多的方式去修改网页标题,这里总结下解决此问题的几种方案: 一.最笨方案 ...
- .NET Core跨平台部署于Docker(Centos)- 视频教程
(双击全屏播放) 往期教程: .NET开发框架(一)-框架介绍与视频演示 .NET开发框架(二)-框架功能简述 .NET开发框架(三)-高可用服务器端设计 .NET开发框架(四)-服务器IIS实践教程 ...
- [翻译]微软 Build 2019 正式宣布 .NET 5
原文: Introducing .NET 5 今天,我们宣布 .NET Core 3.0 之后的下一个版本将是 .NET 5 .这将是 .NET 系列的下一个重要版本. 将来只会有一个 .NET ,您 ...
- java开发高校社团管理系统JSP
运行环境JDK1.7编写Eclipse( Neon.3 Release (4.6.3)) windows下Tomcat v8.5Mysql 5.5使用技术Java servlet & jspM ...
- Python【day 12】生成器和推导式
一.生成器和生成器函数1.生成器和生成器函数的概念 1.生成器的本质是迭代器 2.函数中包含yield,就是生成器函数 2.生成器函数的写法 def func(): a =10 yield 20 ge ...
- SAP S4HANA BP事务代码初始界面的ROLE和Grouping配置
SAP S4HANA BP事务代码初始界面的ROLE和Grouping配置 SAP S/4 HANA系统里,创建供应商不再使用MK01/FK01/XK01等事务代码,而是使用BP事务代码. BP事务代 ...
- 高性能TcpServer(C#) - 5.客户端管理
高性能TcpServer(C#) - 1.网络通信协议 高性能TcpServer(C#) - 2.创建高性能Socket服务器SocketAsyncEventArgs的实现(IOCP) 高性能TcpS ...
- bat延迟执行脚本,利用choice实现定时执行功能
choice是选择语句,具体语法另外再讲.今天利用它来实现定时执行功能.废话少说直接上代码: 示例一: @echo off for %%a in (我 是 一 个 中 国 人) do ping -n ...
- java引用的强制转型
在java的面向对象的特性里,父类的引用可以指向子类的实例对象.但是,如果一个引用b(b本身指向了一个对象)想赋值给引用a,b不是a的类型且不是a的子类类型,那么就需要强制转换,并有失败的可能性,这个 ...
- Prometheus node_exporter grafana部署安装
1.环境 centos7 prometheus-2.10.0.linux-amd64.tar.gz node_exporter-0.18.1.linux-amd64.tar.gz 2.安装 创建sys ...