曼彻斯特码、ABA码、维根码的转换方法与实战应用
ID卡和M1卡每张卡的芯片都有一个唯一的芯片内码,不同的读卡器读出来的内码号不一样,是因为卡片的内码有多种国际标准的编码规则。
曼彻斯特码为16进制,ABA码与维根码均为10进制。
ID卡的曼彻斯特内码由三部分组成:
// ID卡曼彻斯特内码 = 版本代码 + 客户代码 + ID代码
版本代码 (H9) + 客户代码 (H8) + ID代码 (H7~H0)
// 举例:12 5533FFFF
1 2 5 5 3 3 F F F F
H9 H8 H7 H6 H5 H4 H3 H2 H1 H0
示例中为"1"
示例中为"2"
示例中为"5533FFFF"(8个十六进制字符)
ABA码是将十六进制转换为十进制的表示方式:
ID代码(8个十六进制字符)换算为10进制
示例:5533FFFF → 1429471231(10位数字)
ID代码后6个字符换算为10进制
示例:33FFFF → 03407871(8位数字)
ID代码后4个字符换算为10进制
示例:FFFF → 65535(5位数字)
维根码是将多个十六进制位分别转换为十进制:
倒数第6、5位 + 最后4位换算为10进制
示例:33 + FFFF → 051, 65535
倒数第8、7、6、5位 + 最后4位换算为10进制
示例:5533 + FFFF → 21811, 65535
什么叫WG码,什么叫ABA码?以EM卡为例:每张EM卡会有5个字节的数据,其中第一个字节为厂商资讯,基本应用的是4个字节的内容。
一般EM卡片上喷的码会有两个,前一个基本上为ABA码(大多数为ABA8),后一个基本上是WG码(大多数为WG26)。码数越高,重码率越低。
卡面上常见的18位内码转换方式:
// 18位码 = ABA(8H) + WG26(2H+4H)
1429471231 ← ABA(8H): 5533FFFF → 10进制
051, 65535 ← WG26: 33(16进制) → 051 + FFFF(16进制) → 65535
// 所以前十位可以转换成后面的八位,但后面的八位因为使用的位数有限,不能转换成前面的十位
10位数卡号与8位数卡号的转换关系:
// 示例数据:
10位数卡号: 0013961168
16进制: 00 D5 07 D0
8位数卡号: 213 02000
前3位: 213 (对应D5)
后5位: 02000 (对应07 D0)
// 转换规则:
// 10位转16进制是4个字节
// 第一个字节不要
// 第二个字节 = 8位前3位
// 第三四个字节 = 8位后5位
// Excel公式:
=(MOD(X,256*256))+(MOD(INT(X/(256*256)),256)*100000)
M1卡和ID卡一样,每张卡的芯片都有一个唯一的芯片内码。
假设第0扇区第0块的数据为:
2A 83 15 5E E2 88 04 00 47 C1 29 D2 4D 00 06 07
前4字节 UID部分 校验位等
取0扇区0块的前4个字节,按原始顺序:
正码数据: 2A 83 15 5E
合并为: 2A83155E (共8个十六进制字符)
取0扇区0块的前4个字节,字节顺序反读:
反码数据: 5E 15 83 2A (5E在左,2A在右)
合并为: 5E15832A (共8个十六进制字符)
反码不是"位反转",而是"字节顺序反读"。正码 2A 83 15 5E 反读后变成 5E 15 83 2A。
2A83155E (16进制)
= 0713233758 (10进制)
5E15832A (16进制)
= 1578468138 (10进制)
// 原始数据:
2A 83 15 5E E2 88 04 00 47 C1 29 D2 4D 00 06 07
// 正码(按原始顺序取前4字节):
正码数据: 2A 83 15 5E
合并为: 2A83155E
// 反码(字节顺序反读):
反码数据: 5E 15 83 2A
合并为: 5E15832A
// 正码转10进制:
2A83155E (16进制) = 0713233758 (10进制)
// 反码转10进制:
5E15832A (16进制) = 1578468138 (10进制)
原始码:9A 13 F4 65 18 08 04 00 02 36 3E 60 74 50 F2 1D
| 格式 | 正码 | 反码 |
|---|---|---|
| 8H | 9A13F465 | 65F4139A |
| 7H | A13F465 | 5F4139A |
| 6H | 13F465 | F4139A |
| 5H | 3F465 | 4139A |
| 4H | F465 | 139A |
| 8H10D | 2584999013 | 1710494618 |
| 8H9D | 584999013 | 710494618 |
| 8H8D | 84999013 | 10494618 |
| 8H7D | 4999013 | 494618 |
| 8H6D | 999013 | 494618 |
| 8H5D | 99013 | 94618 |
| 8H4D | 9013 | 4618 |
| 6H10D | 0001307749 | 0015995802 |
| 6H9D | 001307749 | 015995802 |
| 6H8D | 01307749 | 15995802 |
| 6H7D | 1307749 | 5995803 |
| 6H6D | 307749 | 995804 |
| 6H5D | 07749 | 95805 |
| 6H4D | 7749 | 5806 |
| 4H6D | 062565 | 005018 |
| 4H5D | 62565 | 05018 |
| 4H4D | 2565 | 5018 |
| WEG24 | 019,62565 | 244,05018 |
| WEG32 | 39443,62565 | 26100,05018 |
1710494618 244,05018 = 8H10D正码 + 空格 + WEG24
| Dec | Hex | Oct | Char | 说明 |
|---|---|---|---|---|
| 0 | 00 | 000 | NUL | 空字符 |
| 1 | 01 | 001 | SOH | 标题开始 |
| 2 | 02 | 002 | STX | 正文开始 |
| 3 | 03 | 003 | ETX | 正文结束 |
| 4 | 04 | 004 | EOT | 传输结束 |
| 5 | 05 | 005 | ENQ | 请求 |
| 6 | 06 | 006 | ACK | 确认 |
| 7 | 07 | 007 | BEL | 响铃 |
| 8 | 08 | 010 | BS | 退格 |
| 9 | 09 | 011 | HT | 水平制表 |
| 10 | 0A | 012 | LF | 换行 |
| 11 | 0B | 013 | VT | 垂直制表 |
| 12 | 0C | 014 | FF | 换页 |
| 13 | 0D | 015 | CR | 回车 |
| 14 | 0E | 016 | SO | 移出 |
| 15 | 0F | 017 | SI | 移入 |
| 16 | 10 | 020 | DLE | 数据链路转义 |
| 17 | 11 | 021 | DC1 | 设备控制1 |
| 18 | 12 | 022 | DC2 | 设备控制2 |
| 19 | 13 | 023 | DC3 | 设备控制3 |
| 20 | 14 | 024 | DC4 | 设备控制4 |
| 21 | 15 | 025 | NAK | 否定应答 |
| 22 | 16 | 026 | SYN | 同步空闲 |
| 23 | 17 | 027 | ETB | 传输块结束 |
| 24 | 18 | 030 | CAN | 取消 |
| 25 | 19 | 031 | EM | 介质结束 |
| 26 | 1A | 032 | SUB | 替补 |
| 27 | 1B | 033 | ESC | 转义 |
| 28 | 1C | 034 | FS | 文件分隔符 |
| 29 | 1D | 035 | GS | 组分隔符 |
| 30 | 1E | 036 | RS | 记录分隔符 |
| 31 | 1F | 037 | US | 单元分隔符 |
| 32 | 20 | 040 | SP | 空格 |
| Dec | Hex | Char | Dec | Hex | Char | Dec | Hex | Char | Dec | Hex | Char |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 33 | 21 | ! | 34 | 22 | " | 35 | 23 | # | 36 | 24 | $ |
| 37 | 25 | % | 38 | 26 | & | 39 | 27 | ' | 40 | 28 | ( |
| 41 | 29 | ) | 42 | 2A | * | 43 | 2B | + | 44 | 2C | , |
| 45 | 2D | - | 46 | 2E | . | 47 | 2F | / | 48 | 30 | 0 |
| 49 | 31 | 1 | 50 | 32 | 2 | 51 | 33 | 3 | 52 | 34 | 4 |
| 53 | 35 | 5 | 54 | 36 | 6 | 55 | 37 | 7 | 56 | 38 | 8 |
| 57 | 39 | 9 | 58 | 3A | : | 59 | 3B | ; | 60 | 3C | < |
| 61 | 3D | = | 62 | 3E | > | 63 | 3F | ? | 64 | 40 | @ |
| 65 | 41 | A | 66 | 42 | B | 67 | 43 | C | 68 | 44 | D |
| 69 | 45 | E | 70 | 46 | F | 71 | 47 | G | 72 | 48 | H |
| 73 | 49 | I | 74 | 4A | J | 75 | 4B | K | 76 | 4C | L |
| 77 | 4D | M | 78 | 4E | N | 79 | 4F | O | 80 | 50 | P |
| 81 | 51 | Q | 82 | 52 | R | 83 | 53 | S | 84 | 54 | T |
| 85 | 55 | U | 86 | 56 | V | 87 | 57 | W | 88 | 58 | X |
| 89 | 59 | Y | 90 | 5A | Z | 91 | 5B | [ | 92 | 5C | \ |
| 93 | 5D | ] | 94 | 5E | ^ | 95 | 5F | _ | 96 | 60 | ` |
| 97 | 61 | a | 98 | 62 | b | 99 | 63 | c | 100 | 64 | d |
| 101 | 65 | e | 102 | 66 | f | 103 | 67 | g | 104 | 68 | h |
| 105 | 69 | i | 106 | 6A | j | 107 | 6B | k | 108 | 6C | l |
| 109 | 6D | m | 110 | 6E | n | 111 | 6F | o | 112 | 70 | p |
| 113 | 71 | q | 114 | 72 | r | 115 | 73 | s | 116 | 74 | t |
| 117 | 75 | u | 118 | 76 | v | 119 | 77 | w | 120 | 78 | x |
| 121 | 79 | y | 122 | 7A | z | 123 | 7B | { | 124 | 7C | | |
| 125 | 7D | } | 126 | 7E | ~ | 127 | 7F | DEL |
在RFID卡片写入URL时,字符串会被转换为ASCII码的十六进制值。例如:
例如:0x2A = 2×16¹ + 10×16⁰ = 32 + 10 = 42
除以16取余,倒序排列
例如:42 ÷ 16 = 2 余 10 → 2A
| 卡类型 | 码制 | 进制 | 示例 |
|---|---|---|---|
| ID卡 | 曼彻斯特码 | 16进制 | 125533FFFF |
| ABA码/WG码 | 10进制 | 1429471231 / 051,65535 | |
| M1卡 | 正码 | 16进制 | 2A83155E |
| 反码 | 16进制 | 5E15832A |