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 ...
 
随机推荐
- CentOS系统安装Python3
			
准备: CentOS 6.4系统 Python-3.6.5.tgz 下载地址: 官网:https://www.python.org/downloads/release/python-365/ 镜像:h ...
 - CentOS 配置阿里云 yum 源
			
CentOS 1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.下载新的Cent ...
 - Docker中如何调试剖析.net core 的程序。
			
前言 现在.net core跨平台了,相信大部分人都把core的程序部署在了linux环境中,或者部署在了docker容器中,与之对应的,之前都是部署在windows环境中,在win中,我们可以用wi ...
 - NIO你真正了解多少?
			
解释一下java.io.Serializable接口 类通过实现 Java.io.Serializable 接口以启用其序列化功能.未实现此接口的类将无法使其任何状态序列化或反序列化. IO操作最佳实 ...
 - 在秉火STM32F429挑战者开发板上移植Huawei LiteOS指南
			
昨天在B站上突然看到了一个短视频,是在正点原子的战舰V3开发板上移植华为的Huawei LiteOS操作系统,就是这个视频:看完鸿蒙OS发布会,试用华为的物联网操作系统Lite OS(B站),于是呢, ...
 - jvm常用排错命令
			
jvm命令很多,有一篇博客整理的非常全 https://www.cnblogs.com/ityouknow/p/5714703.html.我只列举一些常用的排错用到的. jps -l -v ...
 - Linux之Shell编程(15)
			
case: for: while:
 - web自动化测试
			
自动化测试主要分为下面三种: 1.单元测试(Unit Test) 对单独的代码块,比如函数进行测试.单元测试是自动化测试的主要形式,也是最基本的形式. 2.集成测试(Integration Test) ...
 - CSS颜色、单位、文本样式
			
一.CSS颜色:关键字 red16进制的6位 #ffffff16进制的3位 #fffrgb(0,255,100) 取值范围:0~255 (r:red.g:green.b:blue)rgba(0,255 ...
 - (转)Unity与3ds Max的单位关系(使用FBX文件)
			
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/a1780531/article/deta ...