运行地址:

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. 【10】Nginx:后面有无 / 的区别

    写在前面的话 在 nginx 中,我们很多时候都有一个疑问,在 proxy_pass 或者 root 或者 location 后面需不需要加上 /,加和不加有啥区别. root  / alias 后面 ...

  2. js函数定义及一些说明

    1.javascript定义函数的三种方法一.function语句//这个方法比较常用function fn(){ alert("这是使用function语句进行函数定义");}f ...

  3. 【UWP】实现 FindAncestor 绑定

    在 WPF 里,我们是可以在 RelativeSource 上面实现的,举个例子: <Grid Tag="2"> <Button> <Grid Tag ...

  4. Hyper-V + CentOS7 安装教程(视频)

    (双击全屏播放) 一.前言 为什么选择Hyper-V? windowns自带,免费 基础环境 二.虚拟机配置 下载CentOS7镜像 https://www.centos.org/download/ ...

  5. 关于javascript,多种函数封装!!

    1.获取最终的属性 function getStyleAttr(obj, attr){ if(window.getComputedStyle){ return window.getComputedSt ...

  6. delphi FillChar的用法(转)

    delphi FillChar的用法(转) (2012-12-24 15:12:06) 转载▼ 标签: it 分类: delphi7 FillChar的用法(delphi) Fillchar是Turb ...

  7. [小程序]微信小程序获取input并发送网络请求

    1. 获取输入框数据wxml中的input上增加bindinput属性,和方法值在js部分定义与之对应的方法,只要在输入的时候,数据就会绑定调用到该方法,存入data属性变量中 2. 调用get请求发 ...

  8. 1-22Python练习题1-1

      Python¶   (一)四个数字:1.2.3.4,组成多少个互不相同且无重复数字的三位数?各是多少? In [1]: b=[] for i in range(1,5): for j in ran ...

  9. Confluence 6.9.0 安装

    平台环境:centos 7.6 数据库版本:mysql-5.7.26,提前安装好,安装步骤略. 软件版本:Confluence6.9.0 所需软件:提前下载到本地电脑 atlassian-conflu ...

  10. 001-k8s集群的安装

    k8s集群的安装 1.实验描述 通过搭建 K8S 的集群,来学习对容器的编排 2.实验环境 [你可能需要][CentOS 7 搭建模板机]点我快速打开文章 [你可能需要][VMware 从模板机快速克 ...