IC/ID卡的卡号的不同格式的转换
IC/ID卡的卡号的不同格式的转换
设备:
读卡器类型:仿真键盘类型
读卡器型号:USB-203-8H-10D IC/ID读卡器 10位卡号
卡:ID卡 8位
格式 | 说明 |
---|---|
8H10D_Z | IC/ID卡的号码4个字节转成10进制输出。(正码) |
8H10D_F | IC/ID卡的号码4个字节转成10进制输出。(反码) |
8H_Z | IC/ID卡的号码4个字节转成10进制输出,共计8位。(正码) |
8H_F | IC/ID卡的号码4个字节转成10进制输出,共计8位。(反码) |
十六进制和十进制映射关系
十六进制 | 十进制 |
---|---|
0 | 0 |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 5 |
6 | 6 |
7 | 7 |
8 | 8 |
9 | 9 |
A | 10 |
B | 11 |
C | 12 |
D | 13 |
E | 14 |
F | 15 |
转换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); // 将最低字节移到最高位
}
}