运行地址:

https://c.runoob.com/compile/10

IDCODE校验器官网

http://check.idcode.net/

算法源码

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校验算法的更多相关文章

  1. 银行卡luhm校验算法

    /** * 15位银行卡luhm校验算法 * 1.从卡号最后一位数字开始,逆向将奇数位(1.3.5等等)相加. * 2.从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去 ...

  2. 数据帧CRC32校验算法实现

    本文设计思想采用明德扬至简设计法.由于本人项目需要进行光纤数据传输,为了保证通信质量要对数据进行校验.在校验算法中,最简单最成熟的非CRC校验莫属了. 得出一个数的CRC校验码还是比较简单的: 选定一 ...

  3. C# 异或校验算法

    C# 的异或校验算法 直接上代码 public partial class FormCRC : Form { public FormCRC() { InitializeComponent(); } p ...

  4. 常用校验算法CRC、MD5、SHA_转

    1.算法概述 数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名.数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密.数据摘要算法也被称为哈希(H ...

  5. C#校验算法列举

    以下是工作中常用的几种校验算法,后期将不断更新 和校验 /// <summary> /// CS和校验 /// </summary> /// <param name=&q ...

  6. CRC校验算法学习

    原文:http://www.repairfaq.org/filipg/LINK/F_crc_v31.html 本文根据上述链接原文翻译而来,如有错误,忘广大网友互相帮忙纠正,谢谢! 1.前言: 1.0 ...

  7. CRC校验算法的实例解析

    概念   CRC校验算法,说白了,就是把需要校验的数据与多项式进行循环异或(XOR), 进行XOR的方式与实际中数据传输时,是高位先传.还是低位先传有关.对于数据 高位先传的方式,XOR从数据的高位开 ...

  8. 银行卡号Luhn校验算法

    /** *银行卡号Luhn校验算法 *luhn校验规则:16位银行卡号(19位通用): *1.将未带校验位的 15(或18)位卡号从右依次编号 1 到 15(18),位于奇数位号上的数字乘以 2. * ...

  9. Java CRC16 MODBUS校验算法实现

    /** * CRC校验算法工具类 */ public class CRCUtil { public static String getCRC(String data) { data = data.re ...

随机推荐

  1. Python【day 11】迭代器

    迭代器-用 1.迭代器的概念 1.可迭代对象-iterable str.list.tuple.dict.set.open().range() 2.可迭代对象的概念: 其数据类型的执行方法中含有__it ...

  2. Java操作zip-压缩和解压文件

    一.说明 rar格式的压缩包收费,java支持zip格式的压缩和解压 二.工具类 import java.io.*; import java.util.Enumeration; import java ...

  3. docker 安装与基本命令

    安装 Install Docker for Linux Download Docker for Mac Install Docker for Windows 镜像是docker三大核心概念中最重要的. ...

  4. AI人脸识别的测试重点

    最常见的 AI应用就是人脸识别,因此这篇文章从人脸识别的架构和核心上,来讲讲测试的重点. 测试之前需要先了解人脸识别的整个流程,红色标识代表的是对应AI架构中的各个阶段 首先是人脸采集. 安装拍照摄像 ...

  5. pdfium sdk调用方式

    FPDF_InitLibrary(NULL); FPDF_CreateNewDocument(); FPDF_DestroyLibrary();

  6. shell脚本特殊符号——单引号、双引号、反引号、反斜杠

    1. 单引号 ( '' ) 被单引号用括住的内容,将被视为单一字串. 2. 双引号 ( " " )  被双引号用括住的内容,将被视为单一字串.双引号只要求忽略大多数,具体说,括在双 ...

  7. 02-人脸识别-基于MTCNN,框选人脸区域-detect_face

    (本系列随笔持续更新) 这部分代码是基于参考中的链接,修改后适用于TensorFlow1.6.0版本的代码.由于TensorFlow的频繁更新,所以不一定支持后续新或者就版本,特此说明. 程序的最初版 ...

  8. 安装_升级Eclipse插件

    在线安装_升级Eclipse插件可以保证插件的完整性,并可自由选择最新版本.1.单击Eclipse的Help菜单,选择"Install New Software"菜单项2.单击&q ...

  9. 集合(List、Set、Map)

    一.集合与数组 数组:长度固定,数组元素可以是基本类型,也可以是对象.不适合在对象数量未知的情况下使用. 集合:(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用. Java集合类存放 ...

  10. java 深入理解jvm内存模型 jvm学习笔记

    jvm内存模型 这是java堆和方法区内存模型 参考:https://www.cnblogs.com/honey01/p/9475726.html Java 中的堆也是 GC 收集垃圾的主要区域.GC ...