我在JSON文件中有一个object
的array
,object
没有唯一的id
,所以我需要创建一个唯一的id
,或者一个唯一的string
。
[
{
"name": "Jack Potts",
"age": "56"
}, {
"name": "Rusty Carr",
"age": "31"
}
]
我知道我可以使用MD5,传入object
,但我将在URL中使用string
,因此我希望它更短。
与/people/3449c9e5e332f1dbb81505cd739fbf3f
相比,我更喜欢/people/1dbb81505
。
它仍然需要是object
的表示,因为我将再次从URL查找此人。
是否有任何产品的string
比MD5 string
短?
我猜MD5是我最好的/唯一的选择,但我想我会问。
- 更新**
我可能没有说清楚,我不只是需要生成一个唯一的id
,我不会用我生成的任何东西更新JSON文件。
我需要一种方法来获取有问题的object
,为它创建一个URL,然后当URL被访问时,使用URL返回到array
中的object
。
据我所知,如果你一次又一次地将相同的string
传递给MD5,它总是会返回相同的MD5 string
,因为它是一个表示。
也许MD5是好的,我只是认为可能有一些东西产生了一个更短的string
,这是一个数据的 * 表示 *。
- 更新2**
array
中的人员可能会更改。人员可能会被添加和删除,因此使用array
索引将无法正常工作。
6条答案
按热度按时间j5fpnvbx1#
如果您只想要比MD5更短的输出,但对唯一性感到满意,只需截断到所需的长度,每个位与任何其他位一样随机,也就是说,您选择的位的任何子集与任何其他子集一样好。
但是要知道,如果两个名字相同,你会得到相同的哈希值。
因为您必须认识到哈希越短,冲突的变化越大,所以您在哈希长度与唯一性之间进行了权衡,这并不坏,只是要确保您有足够的唯一性来满足您的需要。
ni65a41a2#
使用以下函数:
6个字符的字母数字序列足以随机索引10k的集合(366 = 22亿,363 = 46656)。
watbbzwu3#
我不会用生成的任何内容更新JSON文件。
我需要一种方法来获取所讨论的对象,为它创建一个URL,然后在访问URL时使用URL返回数组中的该对象。
然后使用数组中对象的索引:
people/0
将返回{"name": "Jack Potts", "age": "56"}
,people/1
将返回{"name": "Rusty Carr", "age": "31"}
,以此类推...tzcvj98z4#
我建议你使用sha1,它处理一个相对较短的散列。假设你的数据集相对有限〈100000000000 ...等等...项目冲突的机会应该是最小的。
https://github.com/emn178/js-sha1是一个不错的库
它现在做了一个子字符串,+一个冲突检测修改,这应该是可靠的,只要项目的顺序没有改变,如果他们有相同的值,但话又说回来,如果他们有相同的值,这应该是无关紧要的;-)
nle07wnf5#
下面是一段原生JavaScript代码,用来获取一个MD5哈希值,并将其缩短到所需的长度。请注意,哈希值越短,冲突的可能性就越大。
md5函数来自https://stackoverflow.com/a/33486055/7475450
tinymd5函数是基于https://rolandeckert.com/notes/md5转换为JavaScript的代码
vi4fp9gy6#
也许它使用3125个字符工作: