新泽西州的驾照号码不是随机的。它们遵循以下格式:Affff lllii mmyye,其中A是该人的姓氏的首字母,ffff是该姓氏的其余字母到四位数字的映射,lll是全名到三位数字的映射数字和ii是表示中间名首字母的代码(根据下表: mm代表出生月份,yy代表出生年份。e是眼睛的颜色(值1-8对应于BROBLUGRYGRNBLK等)我不明白的是名称是如何映射到整数值的。我只有5个姓氏映射的示例:(忽略第一个字母,因为它不会在映射中起作用

|   | 6 | 7 | 8 |
|---|---|---|---|
| 1 | a | j |   |
| 2 | b | k | s |
| 3 | c | l | t |
| 4 | d | m | u |
| 5 | e | n | v |
| 6 | f | o | w |
| 7 | g | p | x |
| 8 | h | q | y |
| 9 | i | r | z |


名字,我只有四个:

aab    -> 0001
ackson -> 0062
eals   -> 2024
eimel  -> 2278
ounds  -> 6810


是否有人们对如何实现实现有任何想法,甚至对通用的映射函数都有任何想法,该函数都可以将最大25个长度的字符串散列为四位数或三位数,同时保持字典顺序(<​​=,不是<)。 />我尝试过的事情

将每个字母转换为数字1-26。然后,仅采用前四个数字,按规则26 ^ 3 *第一个数字+ 26 ^ 2 *第二个数字+ 26 *第三个+第四个创建数字。然后,将该数字除以26 ^ 4 + 26 ^ 3 + 26 ^ 2 + 26,然后乘以10000,将小数映射为0-9999。这将产生以下映射:

Alexander -> 019
Richard   -> 655
John      -> 407
Matthew   -> 529


获取前10,000个最常见姓氏的列表。按第二个字母顺序,然后检查索引。这将产生以下映射:

aab -> 0000
ackson -> 0035
eals -> 1547
emiel -> 1722
ounds -> 5695


每个字母再细分10,000。第一个数字(根据1-26)将其切成26个片段中的一个。第二个将片段切成26个之一,依此类推。这将产生以下映射:

aab -> 0005
ackson -> 0128
eals -> 2813
emiel -> 3235
ounds -> 7588


将前四个字母中的每个字母转换为1-26。将所有这些连接起来,将结果数字乘以10,000,然后除以26262626。这将产生以下映射: 25252525。这会产生以下映射:

aab -> 0000
ackson -> 0028
eals -> 1536
emiel -> 1648
ounds -> 5656


其他示例

虽然我相信以上所有示例都是正确的,但我还是尝试跟踪记录更多真实的样本数据点。我可以保证的是:

姓氏

aab -> 0003
ackson -> 0392
eals -> 1908
emiel -> 1953
ounds -> 5792


名字

aab -> 0000
ackson -> 0008
eals -> 1584
emiel -> 1631
ounds -> 5623


评论

仅供参考,它可能不是数学映射,而是通向常用名称列表的索引。为了帮助检验该假设,如果您可以找到一个名字非常不常见的人,并查看其映射是否类似于000或999,这将非常有用。
@AlexBeals:如果您是美国公民,就不能提交FOIA请求吗?

@ 0xC0000022L:似乎不是完全随机的。请注意,#(Alexander)<#(John)<#(Matthew)<#(Richard),因此编号遵循名称的字典顺序。

是的,我知道其他方法也能使您与您紧密联系。我只是在为我的第一个评论辩护,在那儿我暗示这可能不是数学映射。

Alex Beals对Soundex的理解是正确的,因为Soundex用于解码魁北克驾照的前4个字母。

#1 楼

这还不是一个完整的答案,但是也许我发现的内容可以与其他信息结合起来以提出完整的解决方案。

名字编码

如果我们假设是线性编码,那么我们将根据您的四个样本来解决这个问题。如果我们将字母值视为a=0, b=1, ...而不管它们是大写还是小写,则可以将您的四个样本转换为四个线性方程式:和四个未知数,使用简单但乏味的代数或使用高斯消除的矩阵形式即可轻松解决。 (很抱歉,数学看起来很丑,但是很遗憾,与其他StackExchange网站不同,ReverseEngineering不支持MathML,这很不幸。)

如果这样做,您将获得以下值:

a*0 +b*11+c*4 +d*23 =  19  (Alex)
a*12+b*0 +c*19+d*19 = 529  (Matt)
a*9 +b*14+c*7 +d*13 = 407  (John)
a*17+b*8 +c*2 +d*7  = 655  (Rich)


都非常整洁和准确,但是存在一个问题,那就是任何四个样本都会得出一些答案。问题是它是否适用于所有可能的名称,但不幸的是,答案是否定的。

更多示例。这是俄罗斯间谍在新泽西州执照的图像,这是警察指南(请参阅第60页)。这张来自NJ MVC的小册子将“ Dennis J. Driver”编码为D4047-16371。如果我们在这些新样本上尝试上面的名字方程,它们将失败,因此不太正确。结果表明,加权并不是那么简单。搜索时,我还发现安大略省和魁北克省的许可证似乎都使用相同的名字和姓氏编码。因此,例如,此临时安大略省许可证可以验证“丹尼斯”在安大略省和新泽西州的编码为163。

当我对所有第一个名字值与第一个字母l(编码为a=0, b=1, ...)进行线性回归时,我得到的方程32.42*l+52.55的R ^ 2值为0.986,这表明它具有高度线性。

姓氏实验

我尝试了一个非常简单的实验,使用姓氏编码,这是一种非常简单的方法,在您尝试过的事情中没有提到。那只是简单地将每个字符视为26位基数。使用第一个字符后的4个字符,可以正确获取“ Baab”和“ Jackson”的编码,但没有其他匹配的编码。

其他编码方案

我做了一些搜索现有的编码方案的工作。 Soundex既容易找到又很容易打折,但是它有很多变体,有可能使用了一些扩展的变体。我无法找到产生这些特定值的Soundex变体,但是在此过程中我学到了一些有趣的东西。

首先,也许不足为奇,长期以来一直需要使用某种编码来尝试匹配数据库中的名称。通常,该问题称为记录链接,通常被认为是将可能拼写错误的名称与数据库中可能匹配的子集进行数学运算。 Soundex已用于此目的,但发现其有效性有些欠缺。 > Levenshtein编辑距离
Jaro记录链接方法
各种语音算法

Cutter-Sanborn四图用于编码图书馆作者姓名

此字符串度量项目看起来似乎是一个很好的算法实现集合,带有指向原始描述文件的链接,但是我还没有尝试过所有这些方法。

#2 楼

我在上面没有看到此信息,但也编码了男性或女性。在后五位数字中,前2位是出生月份。男性为01-12。女性50被添加。所以从51(一月)到62(十二月)运行。
我叫亚历山德拉(Alexandra),也就是你的亚历山大例子中的019。 br />我认识一个中间名alexandra的朋友有61 =(ii)
另一个是Serafina中间名82 =(ii)
另一个是Dorothy中间名64 =(ii)
我建议收集更多的名字样本进行比较

#3 楼

万一您仍在尝试找出答案,我已经取得了一些进展。在u / jccool5000的帮助下(reddit),他收集了900多个样本,这些样本大部分来自安大略省。 AFAIK,安大略和NJ共享相同的编码-魁北克,不确定。我进行了一些数据处理来弄清楚这一点。

从姓氏的数字开始,四位数中的第一个对应于姓氏的第二个字母,因为第一个已经直接编码为许可证编号的第一个字母。 >
0 = A
1 = B C D
2 = E
3 = F G H
4 = I J K
5 = L M N
6 = O
7 = P Q R
8 = S T
9 = U V W X Y Z


其余的三个数字也用于编码姓氏的第二个字母,从000-999。但是,每个第二个数字都有其自己的000-999范围。也就是说:

假设的姓氏XA是X0001
假设的姓氏XAZZZ是X0999,或者接近999。
假设的姓氏XDZZZ是X1999,或近似于999。 />您可以参考上表查看999何时重置为000。这只是我到目前为止发现的模式。我不知道数字如何分配给名称。

姓氏代码要简单得多,但同时,它也不是均匀分布的。名字与名称代码的区别在于它仅从000(Aaron)到799(对于Zoe是796)。我的意思是不均匀分布的名称以A开头,范围从000到071,其中071的名称以BA开头。同时,以Y开头的名称被限制在不小于785到不大于792的较小范围内。

#4 楼

许多州使用称为SoundEx的东西来生成许可证号(有时,当他们要求驾驶执照号时,甚至在政府表格和/或计算机屏幕上也可以看到SoundEx。)听起来与近似值相似,即使它们的拼写可能大相径庭,例如Pheiffer与Fifer)另外,他们可能不会直接使用soundex。

维基百科Soundex

评论


我研究了SoundEx,这是一个有趣的系统,但不适用于新泽西州(已检查)。

– Alex Beals
14-10-15在20:39

#5 楼

我相信这个名字可以用Soundex Code来表示:数字代表姓氏和名字的声音。我无法快速找到阅读的文章,其中详细介绍了NJ许可证的代码,但这是一个常规条目:

评论


希望为此提供资源!我可以肯定地说,这并不是完全正确的,因为在元音掉落方面,“ eals”和“ aab”相对相似,这是大多数Soundex代码使用的。通常,我们希望“ eals”类似于“ aals”,但是前者似乎在2000范围内,而前者则接近0000。

– Alex Beals
11月7日23:47

#6 楼

我向DMV提交了FOIA请求。正如我多年前所言,这几乎是绝对受保护的信息,很可能会被拒绝,但这是对这种影响的正式回应。 47:1A-1等,我要求有机会检查或获得公共记录的副本,这些副本描述了将名字和姓氏映射到驾驶执照ID号(Soundex式的衍生物)的算法。如果搜索或复制这些记录需要任何费用,请告知我费用是否会超过10美元。但是,我也想要求免除所有费用,因为
公开要求的信息符合公共利益。不会出于商业目的寻求此信息。《新泽西州公开公共记录法案》要求七个工作日的响应时间。如果访问我请求的记录所花费的时间超过此时间,请与我联系,以获取有关我何时需要副本或可以检查所请求记录的信息。最好,我
希望通过发送到我的电子邮件地址的电子记录来接收所有信息。如果您拒绝此要求中的任何一项或全部,请列举每项特定的豁免,您认为有理由拒绝披露该信息,并告知我根据法律可以使用的上诉程序。感谢您考虑我的要求。
响应(摘录)
您所寻求的算法信息不受《驾驶员隐私保护法》,《公共记录公开法》,新泽西州法院规则的约束而被披露。和21号行政命令。
此外,NJSA 47:1A-1.1规定:

政府记录不应包括以下
出于P.L目的被视为机密的信息。 1963年,约克73(C.47:1A-1等)
经修订和补充:...商业秘密和
专有商业或金融信息
从任何来源获得...