生成长度为6的唯一ID

时间:2014-12-23 22:48:40

标签: logic unique

我需要生成一个限制为6个块的唯一ID。该ID 包含大写字母数字

我该怎么办?我在使用日期,但我失败了。

更多细节......

这个Id不需要重复,但应该单独生成,而不是基于最后一个序列。 我可以用任何语言做到这一点。

1 个答案:

答案 0 :(得分:0)

我发了一篇博文来生成一个强大的SQL Server密码。您可以根据需要进行调整。有关更好的格式博文here.

我们要求我们的密码必须每90天更改一次。我想自动化这个,听起来很容易,但并不容易。为什么?因为密码有很多规则。

首先,我必须将它存储在web.config中。所以没有XML特殊字符。

quot " 
amp & 
apos ' 
lt < 
gt >

接下来,如果在OLE DB或ODBC连接字符串中使用,则密码不得包含以下字符:[] {}(),; ? *! @

最后,强密码必须包含至少三个以下类别的字符:

English uppercase characters (A through Z)
English lowercase characters (a through z)
Base 10 digits (0 through 9) 
Nonalphabetic characters (for example: !, $, #, %)

因此,记住所有这些规则,我创建了一个简单的类。我可以打电话给

public class PasswordGenerator
{
    private static string CHARS_LCASE = "abcdefgijkmnopqrstwxyz";
    private static string CHARS_UCASE = "ABCDEFGHJKLMNPQRSTWXYZ";
    private static string CHARS_NUMERIC = "23456789";
    private static string CHARS_SPECIAL = "*-+_%/";
    private static string CHARS_ALL = CHARS_LCASE + CHARS_UCASE + CHARS_NUMERIC + CHARS_SPECIAL;

    public static string GeneratePassword(int length)
    {
        char[] chars = new char[length];
        Random rand = new Random();

        for (int i = 0; i < length; i++)
        {
            switch (i)
            {
                case 0:
                    chars[i] = CHARS_LCASE[rand.Next(0, CHARS_LCASE.Length)];
                    break;
                case 1:
                    chars[i] = CHARS_UCASE[rand.Next(0, CHARS_UCASE.Length)];
                    break;
                case 2:
                    chars[i] = CHARS_NUMERIC[rand.Next(0, CHARS_NUMERIC.Length)];
                    break;
                case 3:
                    chars[i] = CHARS_SPECIAL[rand.Next(0, CHARS_SPECIAL.Length)];
                    break;

                default:
                    chars[i] = CHARS_ALL[rand.Next(0, CHARS_ALL.Length)];
                    break;
            }
        }

        return new string(chars);
    }
}

所以现在我只需要调用它来获取新密码:

PasswordGenerator.GeneratePassword(13)