IC 卡“四位日期”算法分析

互联网的终点是美团。

忆往昔

先辈诚不欺我,经历了互联网的野蛮生长,“降本增笑”后,像我这样的初级程序员走到了互联网红利的终点。
混迹互联网的时候,总是能听到一句流传甚广的话“互联网的终点是美团。”
“初闻不知句中意,再闻已是句中人”,情真意切,认识 IC 卡很早,但“深入交往”是在送外卖的时候。
世界是善良的,但总有“恶意”充斥于某些角落,小区、楼宇的门禁总是影响“追风少年”的脚步,阻碍“发家致富”的道路。
有人的地方就有江湖,不经意间总会在某些“禁地”发现一些熟悉的身影,不同的是,他们骑着车风驰电掣,我走着路满头大汗,在“圈子”里混熟后终于知道了其中的奥秘,他们掌握着通往“财富”的钥匙IC 卡
或是曾经租住在某个小区,或是路边 10 元解君愁,他们手上有大量的方便之门,效率提高的同时,财富也水涨船高,他们有着统一的称呼“大神”。
经过长时间的推杯换盏、抽烟、喝酒、烫头后,终于我也可以“横行”于各个“禁地”,效率大幅提升,财富“水涨船高”的同时不禁感叹“科技改变(我的)世界”。
作为曾经的“互联网人”,总不能知其然不知其所以然,遂在闲暇之余总会翻看一些相关书籍和视频,增长见识的同时开阔一下视野,但才疏学浅,终不得入其门。

起因

迫于生活的压力,回到了这个 N 线的小县城。
万事轮回,兜兜转转,现在依然没能逃过美团的“制裁”,“嘿,老板你也在这”(王宝强表情),你说巧不巧吧。
某天下班回家,发现小区的门打不开了,只能“尾随”他人进入,奇怪的是单元门却能刷开,到家翻看了缴费凭证后发现是物业费到期了。
这不是撞枪口上了嘛,尘封已久的兴趣又被勾了起来,在学习网站上学了一些皮毛之后就开始了尝试。


未完待续。。。
发现图片全挂了,搜了一下是微博图床防盗链,修复先。。。


经过

接上,学习中阿婆主提到了“四位日期”这个加密(解密)方法:

把 16 进制的四位日期转换成 2 进制,从后往前以5 4 7的方法分隔(前面不够 7 位了?补 0 呗,不用考虑正负),就得到了三组 2 进制,然后把三组 2 进制转换为 10 进制,就得到了三组数字,分别对应 ,bingo!


好,讲完了,结束。


开玩笑,我“x”子都脱了你给我看这个?


随着深入了解,夏天锤子客栈出现在视线中,他们提供了基础的分析、查询等免费服务。

在一番尝试后,发现锤子中有项日期计算的功能很有意思
日期计算

打开看看
打开看看

功能很多,包含了常用日期处理的方式,其他几个算法都很好理解,看懂明码,其他的暗码、倒置就都明白了;

明码就是 10 进制的数字直接使用;

暗码就是 10 进制的数字转为 16 进制然后使用;

年份倒置最后看,看懂明/暗码 8 位就明白了;

最一头雾水的就是四位日期,它是今天的主角;


看了眼日期,好家伙,从四月初开始写,到现在已经五月中了,给 xx 打工太累了,每天就是睡觉上班,上班睡觉,好在经过取舍,果断解脱出来了。


既然看不懂,那就笨办法,一个一个的尝试,总能找出点规律;

本来打算从 2024 年 1 月 1 日开始尝试,但日期选择器总是重置到当天的日期,选起来甚是麻烦,那就从本月 1 号开始:

2024.5.12345678910
30A130A230A330A430A530A630A730A830A930AA
2024.5.11121314151617181920
30AB30AC30AD30AE30AF30B030B130B230B330B4
2024.5.21222324252627282930
30B530B630B730B830B930BA30BB30BC30BD30BE
2024.5.31
30BF

看出规律了吧,就是正常的 1~9、A~F,这两个区间刚好是 16 进制的数字范围;
F 表示 15,从 16 号开始,又从 0 开始了,不同的是,前面的 30A 变成了 30B,这是什么意思呢?A+1=B?往前进了一位吗?

看不懂没关系,再来切换月,看看月的规律:

2024.1.162024.2.162024.3.162024.4.162024.5.162024.6.16
3030503070309030B030D0
2024.7.162024.8.162024.9.162024.10.162024.11.162024.12.16
30F031103130315031703190

看着很简单嘛,都是奇数;
跟日的规律差不多,奇数用完就往前进一位,然后从头开始;
不对,1 月怎么就两位数?

嘿嘿,如果真的认为规律就是这样,那 1 月 16 只有两位数怎么解释?

回过头再看看日的规律,用 16 进制表示日期,如果日期大于 15,就从 0 重新开始,而且前面的数字➕1;
好巧不巧,今天刚好是 16 号,所以前面的数字是➕1 后的数字,如果假设它是月的话,实际的月是不是要➖1 呢?

不用假设,把日期调到小于 15 的日期试试就知道了:

2024.1.152024.2.152024.3.152024.4.152024.5.152024.6.15
302F304F306F308F30AF30CF
2024.7.152024.8.152024.9.152024.10.152024.11.152024.12.15
30EF310F312F314F316F318F

至于为啥选的 15 号,跟 16 挨得近呗,好切换;

接下来到年了~~