当前位置: 首页 > 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);  // 将最低字节移到最高位
    }
}
http://www.dtcms.com/a/77643.html

相关文章:

  • 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常用操作
  • gem rbenv介绍【前端扫盲】
  • 泰勒多项式
  • 星越L_第二排座椅/头枕使用讲解
  • ABAQUS球体颗粒重力堆积3D模型
  • Spring 中的 AOP 实现机制
  • Day67 | 灵神 | 二分查找:统计公平数对的数目
  • 信息学奥赛一本通 1525:电力 | OpenJudge 百练 2117:Electricity
  • Unity NodeCanvas AI使用笔记
  • MR-Flink-Spark任务提交-常用命令
  • Python赋能区块链溯源系统:从技术实现到应用落地