将字符串(用户名)映射到perl中的UUID

时间:2014-02-19 06:17:52

标签: perl

你如何在perl中的字符串和UUID之间进行映射。

我需要集成一个分配用户用户名的传统perl系统,以及一个为用户分配UUID的java系统。

(只需要一种方式,即UUID的用户名,我不需要以其他方式返回)

我在想这样的事情,虽然我打赌这是一个更简单的方式:

#!/usr/bin/perl
use strict;
use Digest::MD5 qw(md5_hex);

my $username = "bob";
my $hash = md5_hex($username);
my $uuid = substr($hash, 0, 8)."-".substr($hash,8,4)."-".substr($hash,12,4)."-".substr($hash,16,4)."-".substr($hash,20,32);
print "$uuid\n";

1 个答案:

答案 0 :(得分:4)

我建议遵循RFC 4122关于从名称生成UUID的指导原则。

首先,生成随机UUID并将其存储为app / configuration的一部分。

然后:

use Data::UUID;
my $ug = Data::UUID->new;
my $namespace = $ug->from_string("65faad2c-7841-4b60-a7f4-560db1c5e683");
my $uuid = $ug->create_from_name_str($namespace, $username);

使用您自己随机生成的UUID替换“65faad2c-7841-4b60-a7f4-560db1c5e683”。

这可以保证生成有效的UUID(你的md5方法不是),如果你有另一个需要导入新系统的遗留应用程序,只需给该应用程序提供自己的随机UUID就可以避免冲突用作种子。