在IC卡分析工具的帮助下,我把常见的一些梯控日期的算法进行了分析和推导,总结出了IC卡梯控日期的算法规则,具体内容如下表所示:
序号 | 位数 | 明暗 | 方法 | 梯控 | 算法(以2099年12月31日为例) | 十六进制 |
1 | 4 | 暗码 | 正 | 康拓 | 99……12……31(1100011……1100……11111),连接2进制再转16进制 | C79F |
2 | 4 | 暗码 | 算 | 立林 | 99……31……12 63(日>15时+80)=E3……31(日>15时-16)=15(F)……C | E3FC |
3 | 4 | 暗码 | 算 |
| 日期的值转16进制,取最右4位 | 1D5A |
4 | 4 | 暗码 | 算 |
| 日期减1990/1/1的值(32874),再转16进制 | 9CF0 |
5 | 6 | 明码 | 正 |
| 99……12……31 | 991231 |
6 | 6 | 明码 | 倒 |
| 31……12……99 | 311299 |
7 | 6 | 暗码 | 倒 | 富士通 | 31……12……99(1F……0C……63) | 1F0C63 |
8 | 6 | 暗码 | 正 | 前景 | 99……12……31(63……0C……1F) | 630C1F |
9 | 6 | 暗码 | 正 |
| 2099……12……31(833……C……1F) | 833C1F |
10 | 6 | 暗码 | 正 |
| 2099……12……31*8(833……C……F8) | 833CF8 |
11 | 6 | 暗码 | 算 | 卡立德 | 查表获取,年(前两位)和日(后两位)共用一个数值对应表。月(中间两位)用一个数值对应表,具体见下面的附表。 | 03A9E7 |
12 | 8 | 明码 | 正 |
| 2099……12……31 | 20991231 |
13 | 8 | 明码 | 倒 |
| 31……12……99……20 | 31129920 |
14 | 8 | 暗码 | 正 |
| 20……99……12……31(14……63……0C……1F) | 14630C1F |
15 | 8 | 暗码 | 倒 |
| 31……12……99……20(1F……0C……63……14) | 1F0C6314 |
16 | 8 | 暗码 | 倒 |
| 2099……12……31(3308(0833倒序)……0C……1F) | 33080C1F |
17 | 8 | 暗码 | 正 |
| 2099……12……31(0833……0C……1F) | 08330C1F |
18 | 8 | 暗码 | 倒 |
| 31……12……2099(1F……0C……3308(0833倒序)) | 1F0C3308 |
19 | 8 | 暗码 | 倒 |
| 2099……12-31(3308……12*100+31=1231(04CF)倒序CF04) | 3308CF04 |
注:
“明码”表示表面明显能看出是日期数据的码;
“暗码”表示表面无法明显看出是日期数据的码;
“正”表示按照年月日的顺序进行日期算法加持的方法;
“倒”表示按照日月年的顺序进行日期算法加持的方法;
“算”表示无明显顺序规律相对复杂算法加持的方法;
其中卡立德梯控日期的算法没有研究出来,年月日数据对照表如下(2000年1月1日~2099年12月31日):