2012-07-12 152 views
1

我不是一个成熟的开发人员,因为你们中的一些人已经知道,但也许你可以帮助我一个粗略的设计呢?如何生成值为“AAAAAA”到“ZZZZZZ”的唯一随机CHAR(6)?

我想模仿航空公司预订系统为其主键随机生成唯一记录定位符的方式。生成的值中没有一个可以形成淫秽字词,其他指定值或在现有行中重复,因此需要包含禁止值的单独查找表?

编辑:如果用有效键填充表格并随机选择一个未使用key_already_used标志更新的行来生成值,或者应该由用户定义的值随机生成函数,抬头看看它是否在禁止值表中,然后抬头看看它是否已经被插入到保留表中?

+0

数字键有什么问题? – Bohemian 2012-07-12 01:01:24

+1

字母提供更多可能的组合(6!26 - 禁止的值)与(6!10)并且字母比数字更容易记住? – 2012-07-12 01:05:43

+1

这听起来很类似于很多网址缩写器的做法。检查这个问题了一些可能的想法,可能会帮助你http://stackoverflow.com/questions/742013/how-to-code-a-url-shortener – Marshall 2012-07-12 03:17:10

回答

1

Here就是一个很好的例子。

由Int转换为字符序列:

create function CustomerNumber (@id int) 
returns char(5) 
as 
begin 
    return char(@id/power(26,3) % 26 + 65) + 
    char(@id/power(26,2) % 26 + 65) + 
    char(@id/26 % 26 + 65) + 
    char(@id % 26 + 65) 
end 

然后所有你需要做的就是通过一个唯一的整数,你会得到一个唯一的字符串(或随机整数,你会得到随机字符串)

(只记得随机是不一样的独特

我想在informix中它应该看起来像这样?

CREATE FUNCTION CustomerNumber (id int) 
RETURNING char(5); 
RETURN integer::char(id/POW(26,3) % 26 + 65) + 
     integer::char(id/POW(26,2) % 26 + 65) + 
     integer::char(id/26 % 26 + 65) + 
     integer::char(id % 26 + 65) 
END FUNCTION 
+0

这个例子是如何在MySQL中完成的? – 2012-07-12 03:52:10

+1

不..这是SQLServer ...但你的问题没有MySQL标签...哦,我看到你有一个informix标签...对不起,这里没有informix技能......但我会看看我是否能找到一些东西... – Luxspes 2012-07-12 03:53:38

+1

希望它是非常正确的...... – Luxspes 2012-07-12 04:13:36