当前位置: 首页 > news >正文

IC/ID卡的卡号的不同格式的转换

IC/ID卡的卡号的不同格式的转换

设备:
读卡器类型:仿真键盘类型
读卡器型号:USB-203-8H-10D IC/ID读卡器  10位卡号
卡:ID卡 8位
格式说明
8H10D_ZIC/ID卡的号码4个字节转成10进制输出。(正码)
8H10D_FIC/ID卡的号码4个字节转成10进制输出。(反码)
8H_ZIC/ID卡的号码4个字节转成10进制输出,共计8位。(正码)
8H_FIC/ID卡的号码4个字节转成10进制输出,共计8位。(反码)

十六进制和十进制映射关系

十六进制十进制
00
11
22
33
44
55
66
77
88
99
A10
B11
C12
D13
E14
F15

在这里插入图片描述
转换1:将BH_F转换成8H10D_F,即将16进制数转换成10进制数

在这里插入图片描述

public class Test1 {
    public static void main(String[] args) {
        String cardId = "6C6EC2E9";
        byte[] bytes = hexStringToByteArray(cardId);
        String byteArrayToHex = byteArrayToHex(bytes);
        long aLong = Integer.toUnsignedLong(Integer.parseUnsignedInt(byteArrayToHex, 16));
        System.out.println("16进制数:" + cardId);
        System.out.println("16进制数转成10进制数:" + aLong);
    }

    // 将十六进制字符串转换为字节数组
    private static byte[] hexStringToByteArray(String s) {
        int len = s.length();
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                    + Character.digit(s.charAt(i + 1), 16));
        }
        return data;
    }

    // 将字节数组转换为十六进制字符串
    private static String byteArrayToHex(byte[] bytes) {
        StringBuilder hexString = new StringBuilder();
        for (byte b : bytes) {
            String hex = Integer.toHexString(0xFF & b);
            if (hex.length() == 1) {
                hexString.append('0');
            }
            hexString.append(hex);
        }
        return hexString.toString();
    }
}

转换2:将BH_F转换成8H10D_F再转换成8H10D_Z。(将16进制数转换成10进制数,再将10进制数反码)

在这里插入图片描述

public class Test2 {

    public static void main(String[] args) {
        String cardId = "6C6EC2E9";
        byte[] bytes = hexStringToByteArray(cardId);
        String byteArrayToHex = byteArrayToHex(bytes);
        long aLong = Integer.toUnsignedLong(Integer.parseUnsignedInt(byteArrayToHex, 16));
        System.out.println("16进制数:" + cardId);
        System.out.println("16进制数转成10进制数:" + aLong);

        int reverseBytes = reverseBytes(new Long(aLong).intValue());
        long unsignedReversed = Integer.toUnsignedLong(reverseBytes);
        System.out.println("10进制数反码:" + unsignedReversed);
    }

    // 将十六进制字符串转换为字节数组
    private static byte[] hexStringToByteArray(String s) {
        int len = s.length();
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                    + Character.digit(s.charAt(i + 1), 16));
        }
        return data;
    }

    // 将字节数组转换为十六进制字符串
    private static String byteArrayToHex(byte[] bytes) {
        StringBuilder hexString = new StringBuilder();
        for (byte b : bytes) {
            String hex = Integer.toHexString(0xFF & b);
            if (hex.length() == 1) {
                hexString.append('0');
            }
            hexString.append(hex);
        }
        return hexString.toString();
    }

    // 反转 32 位整数的字节顺序
    private static int reverseBytes(int n) {
        return ((n >> 24) & 0xFF)       | // 将最高字节移到最低位
                ((n >> 8)  & 0xFF00)    | // 将次高字节移到次低位
                ((n << 8)  & 0xFF0000)  | // 将次低字节移到次高位
                ((n << 24) & 0xFF000000);  // 将最低字节移到最高位
    }
}

转换3:将8H_F转成8H_Z

在这里插入图片描述

public class Test3 {
    public static void main(String[] args) {
        String hexString = "6C6EC2E9";

        // 将十六进制字符串转换为字节数组
        byte[] bytes = hexStringToByteArray(hexString);

        // 反转字节数组
        reverseBytes(bytes);

        String arrayToHex = byteArrayToHex(bytes);
        System.out.println("反转后的字符串:" + arrayToHex);
    }

    // 将十六进制字符串转换为字节数组
    public static byte[] hexStringToByteArray(String s) {
        int len = s.length();
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                    + Character.digit(s.charAt(i + 1), 16));
        }
        return data;
    }

    // 将字节数组转换为十六进制字符串
    public static String byteArrayToHex(byte[] bytes) {
        StringBuilder hexString = new StringBuilder();
        for (byte b : bytes) {
            String hex = Integer.toHexString(0xFF & b);
            if (hex.length() == 1) {
                hexString.append('0');
            }
            hexString.append(hex);
        }
        return hexString.toString();
    }

    // 反转字节数组
    public static void reverseBytes(byte[] bytes) {
        for (int i = 0; i < bytes.length / 2; i++) {
            byte temp = bytes[i];
            bytes[i] = bytes[bytes.length - 1 - i];
            bytes[bytes.length - 1 - i] = temp;
        }
    }
}

转换4:将8H_F转成8H_Z,再将8H_Z转换成8H10D_Z

在这里插入图片描述

public class Test4 {
    public static void main(String[] args) {
        String hexString = "6C6EC2E9";

        // 将十六进制字符串转换为字节数组
        byte[] bytes = hexStringToByteArray(hexString);

        // 反转字节数组
        reverseBytes(bytes);

        String arrayToHex = byteArrayToHex(bytes);
        System.out.println("反转后的字符串:" + arrayToHex);

        long aLong = Integer.toUnsignedLong(Integer.parseUnsignedInt(arrayToHex, 16));

        System.out.println("十进制数:" + aLong);
    }

    // 将十六进制字符串转换为字节数组
    public static byte[] hexStringToByteArray(String s) {
        int len = s.length();
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                    + Character.digit(s.charAt(i + 1), 16));
        }
        return data;
    }

    // 将字节数组转换为十六进制字符串
    public static String byteArrayToHex(byte[] bytes) {
        StringBuilder hexString = new StringBuilder();
        for (byte b : bytes) {
            String hex = Integer.toHexString(0xFF & b);
            if (hex.length() == 1) {
                hexString.append('0');
            }
            hexString.append(hex);
        }
        return hexString.toString();
    }

    // 反转字节数组
    public static void reverseBytes(byte[] bytes) {
        for (int i = 0; i < bytes.length / 2; i++) {
            byte temp = bytes[i];
            bytes[i] = bytes[bytes.length - 1 - i];
            bytes[bytes.length - 1 - i] = temp;
        }
    }
}

转换5:将8H10D_F转换8H10D_Z

在这里插入图片描述

public class Test5 {
    public static void main(String[] args) {
        int original = 1819198185;
        int reversed = reverseBytes(original);
        long unsignedReversed = Integer.toUnsignedLong(reversed);
        System.out.println(unsignedReversed);
    }

    // 反转 32 位整数的字节顺序
    private static int reverseBytes(int n) {
        return ((n >> 24) & 0xFF)       | // 将最高字节移到最低位
               ((n >> 8)  & 0xFF00)    | // 将次高字节移到次低位
               ((n << 8)  & 0xFF0000)  | // 将次低字节移到次高位
               ((n << 24) & 0xFF000000);  // 将最低字节移到最高位
    }
}

相关文章:

  • created在vue3 script setup中的写法
  • redis搭建一主一从+keepalived(虚拟IP)实现高可用
  • 【8】分块学习笔记
  • 修改War包文件
  • PTA C语言程序设计 第三章
  • linux Redhat9.5采用DNS主从实现跨网段解析
  • 批量删除 PPT 中的所有图片、某张指定图片或者所有二维码图片
  • 【Java】——方法的使用(从入门到进阶)
  • deepseek使用记录99——为何追问
  • nginx 配置ip黑白名单
  • Docker 内部通信(网络)
  • 基于MySQL的创建<resultMap>和查询条件<if test>
  • zookeepernacoskafka之间的联系
  • Linux系统上后门程序的原理细节,请仔细解释一下
  • 【GeeRPC】项目总结:使用 Golang 实现 RPC 框架
  • PostgreSQL:语言基础与数据库操作
  • Cloudlog系统接口 search_log未授权存在SQL注入漏洞代码审计(DVB-2025-8964)
  • 大数据 ETL 异常值缺失值处理完整方案
  • 美团-测开
  • git tag常用操作
  • 韩国大选连发“五月惊奇”:在野党刚“摆脱”官司,执政党又生“内讧”
  • 中国工程院院士、国医大师石学敏逝世
  • 巴西总统卢拉昨晚抵达北京
  • 越怕出错越会出错,“墨菲定律”的魔咒该怎么破?
  • 国家出口管制工作协调机制办公室部署开展打击战略矿产走私出口专项行动
  • 陕西澄城樱桃在上海推介,向长三角消费者发出“甜蜜之邀”