客户ID(SQL)的唯一6位数字但不是连续的

Dom*_*Bat 6 sql sql-server random numbers c#-4.0

我们的Customer表有一个ID标识列.这将发给客户,所以当他们打电话时他们可以提供他们的身份证.

现在显而易见的是,我们的竞争对手可以轻松地在我们的网站上注册两次,比如相隔一个月,并确切地知道有多少人注册了.

因此,有一个很好的简单方法来创建一个"客户ID"(在SQL或c#中)我们可以给客户:(a)6位数长(b)是唯一的(c)不是顺序的(

提前致谢

Tom*_*ler 3

也许这很疯狂,但这是我预先生成客户编号的方法。

这将很快生成您想要的许多唯一密钥。

显然,您可以将它们保存到真实的表中。

这是以下的SQLFiddle : http://www.sqlfiddle.com/#!3 /d41d8/3884

DECLARE @tbl TABLE
(
    ID INT IDENTITY(1,1),
    CustNo INT UNIQUE
)

DECLARE @Upper INT
DECLARE @Lower INT
DECLARE @NumberRequired INT

SET @Lower = 100000 ---- The lowest random number allowed
SET @Upper = 999999 ---- The highest random number allowed
SET @NumberRequired = 1000 -- How many IDs do we want?

WHILE (SELECT COUNT(*) FROM @tbl) < @NumberRequired
BEGIN
    BEGIN TRY
        INSERT INTO @tbl SELECT (ROUND(((@Upper - @Lower -1) * RAND() + @Lower), 0))
    END TRY
    BEGIN CATCH
        -- If it goes wrong go round the loop again
    END CATCH
END

SELECT  *
FROM    @tbl
Run Code Online (Sandbox Code Playgroud)

编辑:实际上这可能更快。它在我的开发机器上大约 30 秒内生成所有 900000 个可能的密钥,这对于一次性工作来说是可以的。

DECLARE @tbl TABLE
(
    ID INT
)

DECLARE @Upper INT
DECLARE @Lower INT
DECLARE @i INT;

SET @Lower = 100000 ---- The lowest random number allowed
SET @Upper = 999999 ---- The highest random number allowed

SET @i = @Lower

WHILE @i <= @Upper
BEGIN
    INSERT INTO @tbl SELECT @i
    SET @i = @i + 1
END

SELECT  ID
FROM    @tbl ORDER BY NEWID()
Run Code Online (Sandbox Code Playgroud)