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 ...
随机推荐
- java架构之路-(mysql底层原理)Mysql索引和查询引擎
今天我们来说一下我们的mysql,个人认为现在的mysql能做到很好的优化处理,不比收费的oracle差,而且mysql确实好用. 当我们查询慢的时候,我会做一系列的优化处理,例如分库分表,加索引.那 ...
- EntityUtils.toString(entity)处理字符集问题解决
爬取51Job和猎聘网的信息,想处理字符集问题(51job为gbk,猎聘为utf-8), 找到两个网站字符集信息都在同一标签下 就想先把网页保存成String,解析一遍获取字符集,然后将网页转换成对应 ...
- 机器学习实战:基于Scikit-Learn和TensorFlow 第5章 支持向量机 学习笔记(硬间隔)
数据挖掘作业,需要实现支持向量机进行分类,记录学习记录 环境:win10,Python 3.7.0 SVM的基本思想:在类别之间拟合可能的最宽的间距,也叫作最大间隔分类 书上提供的源代码绘制了两个图, ...
- hydra使用,实例介绍
hydra 是一个网络帐号破解工具,支持多种协议.其作者是van Hauser,David Maciejak与其共同维护.hydra在所有支持GCC的平台能很好的编译,包括Linux,所有版本的BSD ...
- Maven 生命周期的阶段与插件的目标之间的绑定关系
clean 生命周期 clean 生命周期的阶段 插件的目标 pre-clean clean maven-clean-plugin:clean post-clean default 生命周期的内置插件 ...
- 洛谷 P1628 合并序列
洛谷 P1628 合并序列 题目传送门 题目描述 有N个单词和字符串T,按字典序输出以字符串T为前缀的所有单词. 输入格式 输入文件第一行包含一个正整数N: 接下来N行,每行一个单词,长度不超过100 ...
- Springboot 项目中 xml文件读取yml 配置文件
<bean id="yamlProperties" class="org.springframework.beans.factory.config.YamlProp ...
- idea中怎么忽略(ignore)掉 .idea等文件
idea需要下载一个专门的plugins 来ignore .idea *.iml等文件 可以在https://plugins.jetbrains.com/idea/plugin/7495–ignore ...
- 11/11 <Topological Sort> 207
207. Course Schedule 我们定义二维数组 graph 来表示这个有向图,一维数组 in 来表示每个顶点的入度.我们开始先根据输入来建立这个有向图,并将入度数组也初始化好.然后我们定义 ...
- 【转】jsp 页面 按回车键 触发事件
转载: https://blog.csdn.net/ludongshun2016/article/details/59536779. 第一种: <script type="text/J ...