YouTube 上的每个视频都有一个唯一的标识字符串,例如 1cru2fzUlEc。
是否有任何 Java 方法可以生成接近它的东西?关闭我的意思是字符串是唯一的,短的,并且使用数字和字母(区分大小写)。
我需要以与 YouTube 相同的方式使用这样的字符串:识别后端系统中的记录。我正在做一个 Java Web 应用程序。我不想使用http://example.com?id=123的方法。
我知道 Java 的 UUID 实现可以产生类似的结果,但与 YouTube 相比它太长了。
谢谢!
编辑1:
非常感谢大家的回复。您的所有输入都是有用的!似乎没有完美的解决方案。任何完美的东西(如果不是 UUID)都必须生成和检查(以避免重复)。我对吗?
我可以肯定地说 YouTube 在生成自己的 12 个字符的视频字符串时面临与我们 Java 人员相同的问题吗?
干杯!
编辑2:
我想使用全范围的字母数字字符,而不仅仅是十六进制数字。我将使用 Marcus Junius Brutus 的解决方案。我觉得它足够直观和安全。从理论上讲,我必须检查每个生成的字符串,但我不会这样做,因为每次检查都是另一个数据库调用。我将向生成的字符串 ID 的表字段添加唯一约束。我会让那个不幸的用户在他第一次生成记录时失败。他需要做的是返回表单再次填写并保存(希望不会因为重复的字符串值而第二次失败)。最初我将使用 12 个字符的字符串,并且可以在需要时轻松增加长度。
我打算将此解决方案用于与同一个后端数据库通信的分布式 Web 应用程序,这意味着同一个应用程序有多个 JVM。
这是我的解决方案,我希望它会奏效。
String sampleAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
Random random = new Random();
char[] buf = new char[12];
for (int i = 0 ; i < 12 ; i++)
buf[i] = sampleAlphabet.charAt(random.nextInt(sampleAlphabet.length()));
return new String(buf);
谢谢大家的回复。它们都是可以接受的解决方案。我真的很感激。
最好的给你们!