Sun*_*Jha 28
YouTube使用Base64编码为每个视频生成ID.生成ID的参与者包括
(AZ)+(az)+(0-9)+( - )+(_).(64个字符).
使用Base64编码,最多只能有11个字符,它们可以生成73个以上的Quintilian唯一ID.那么大的ID池是多少?
嗯,这足以让地球上的每个人每隔一分钟生成18000年的视频.
他们只需要使用11个字符(64*64*64*64*64*64*64*64*64*64*64)即可获得如此巨大的数字,如果他们需要更多ID,他们只需添加1个字符即可他们的身份证
因此,当视频在YouTube上传时,他们基本上会随机选择73 + Quintilian的可能性,看看它是否已被拍摄.如果没有使用它,否则寻找另一个.
有关详细说明,请参阅此视频.
Eli*_*sky 22
使用一些非平凡的散列函数.碰撞概率非常低,取决于功能,参数和输入域.请记住,加密哈希值专门设计为对非随机输入具有非常低的冲突率(即两个接近但不相等的输入的完全不同的哈希值).
Jeff Attwood的这篇文章是对这个主题的一个很好的概述.
而这里是一个在线的散列运算单元,你可以玩.
不需要使用哈希.它可能只是通过base64或某些等价物传递的准随机64位值.
通过准随机,我的意思是它只是与计数整数的一对一映射,只是改组.
例如,您可以采用单调递增的数据库ID并将其乘以2 ^ 64附近的某个素数,然后将结果与base64相乘.如果您不希望人们猜测,您可以选择更复杂的映射,或者只选择一个不在数据库中的随机数.
普通base64会在结尾处添加一个等号,但在这种情况下它是暗示的,因为大小是已知的.字符映射很容易成为标准之外的东西.
您可以使用任何库或某些语言(例如Python)在标准库中提供它。
例子:
import secrets
id_length = 12
random_video_id = secrets.token_urlsafe(id_length)