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 ...
随机推荐
- Kubernetes 弹性伸缩全场景解析(三) - HPA 实践手册
在上一篇文章中,给大家介绍和剖析了 HPA 的实现原理以及演进的思路与历程.本文我们将会为大家讲解如何使用 HPA 以及一些需要注意的细节. autoscaling/v1 实践 v1 的模板可能是大家 ...
- JVM的监控工具之jconsole
JConsole(Java Monitoring and Management Console)是一种基于JMX的可视化监视.管理工具.管理的是什么?管理的是监控信息.永久代的使用信息.类加载等等 如 ...
- NetCoreApi框架搭建(一、swagger插件使用)
1.首先用vs2017创建新的项目 2.开始引入swagger插件 右击项目=>管理NuGet程序包=>搜索Swashbuckle.AspNetCore点击安装 3.打开Startup.c ...
- C# 实现敏感词过滤
实现 该 敏感词过滤 采用的是 DFA算法,参考文章:https://blog.csdn.net/chenssy/article/details/26961957 具体 实现 步骤 如下: 第一步,构 ...
- 解决maven项目中web.xml is missing and <failOnMissingWebXml> is set to true
web.xml is missing and <failOnMissingWebXml> is set to true 是因为项目中没有web.xml文件, 步骤如下:
- tf.reduce_sum() and tf.where()的用法
import tensorflow as tfimport numpy as npsess=tf.Session()a=np.ones((5,6))c=tf.cast(tf.reduce_sum(a, ...
- AI2(App Inventor 2)离线版服务器(AI伴侣2.47版)
提供这个版本的原因: 与app.gzjkw.net的源代码版本尽可能的接近,这样导入app.gzjkw.net源文件的时候不会有“该项目由新版App Inventor系统创建,我们仍然尝试将其加载,但 ...
- HeadFirst设计模式---抽象工厂
类图 抽象披萨商店类 public abstract class PizzaStore { public void orderPizza(String type) { AbstractPizza ab ...
- 为什么重复的GET请求变慢了?
最近在研究慢请求监控的问题,写了一个简单的测试代码:在网页端(index.html)通过fetch函数向服务端获取数据,然后打印请求耗时. function requestData() { let s ...
- 2.dubbo 支持哪些通信协议?支持哪些序列化协议?说一下 Hessian 的数据
作者:中华石杉 面试题 dubbo 支持哪些通信协议?支持哪些序列化协议?说一下 Hessian 的数据结构?PB 知道吗?为什么 PB 的效率是最高的? 面试官心理分析 上一个问题,说说 dubbo ...