首页 > 解决方案 > 从两个 96 位数字生成唯一的 32 位数字

问题描述

为了识别设备,我需要一个唯一编号(32 位)。我正在使用 STM32 微控制器和 NFC 读卡器芯片,它们都提供唯一的 96 位数字

两个 96 位数字都不能缩小偏移,因为供应商不共享 96 位数字的组成——可能是为了识别假冒产品。

对于当前的 MCU,我提取了以下数据:

单片机 1

0-31 位 = 0x410024

32-63 位 = 0x3848500c

64-96 位 = 0

单片机 2

0-31 位 = 0x5f0027

32-63 位 = 0x3848500c

64-96 位 = 0

数据表中的内容描述如下:

0..31 硅晶圆 XY 位置(因此每个单一波动都会在此处重复)

32 晶圆批号

33..96 批号

所以显然上面的两个例子是同一批,同一个晶圆,只是位置不同,这是有道理的,因为它们是从同一个卷轴上取出的

对于 NFC 阅读器,我提取了以下内容

NFC 阅读器

0-31 位 = 0x34471725

32-63 位 = 0x53484835

64-96 位 = 0x38301531

读者对数字是如何组成的信息为零。

我的问题是,是否可以从这两个 96 位数字中生成一个新的唯一 32 位数字。数字可以是任意的,它必须与原始数字没有关系,但应尽可能唯一。

任何意见将是有益的

标签: c++armstm32

解决方案


如果有随机的碰撞机会,它的概率会随着每个单元的增加而大致呈指数增长。这被称为生日问题

对于 100,000 个项目, 在此处输入图像描述给出 0.6878(由Wolfram Alpha提供),即超过 68%。对于 10,000 个项目,它几乎不超过 1%。玩弄这些数字,看看你是否可以冒险。


为了保证结果,我会在设备中添加一个便宜的序列号 EEPROM,例如24AA02UID


推荐阅读