如何在飞行中生成唯一的(短)URL文件夹名称…像Bit.ly



我正在创建一个应用程序,它将在web服务器上创建大量文件夹,其中包含文件。

我需要文件夹名称是唯一的。我可以用GUID轻松地做到这一点,但我想要一些更用户友好的东西。它不需要被用户说出来,但应该是简短和标准的字符(alpha是最好的)。

简而言之:我想做一些类似Bit的事情。使用它们唯一的名称:

www.mydomain.com/ABCDEF

关于如何做到这一点有很好的参考吗?我的平台将是。net/c#,但如果有任何关于一般概念的帮助,参考资料,链接等,或者任何解决此任务的总体建议,则ok。

从1开始。增量为2,3,4,5,6,7,

8,9, a, b,…

A, B, C…

X, Y, Z, 10,11,12,…1 a、1 b

你懂的。

你有一个同步的全局int/long "next id",并以62(数字,小写字母,大写字母)或36为进制表示。

我假设你知道如何使用你的web服务器的重定向功能。如果你需要帮助,请评论:).

我要做的是生成一个随机整数(在'a'和'z'的整数值之间);将其转换为字符;将其附加到字符串;不断重复,直到得到所需的长度。如果它生成的值已经存在于数据库中,则重复该过程。如果它是唯一的,则使用实际位置的名称和别名的名称将其存储在数据库中。

这有点像黑客,因为它假设'a'到'z'实际上是按整数值顺序排列的。

我能想到的最好的

在Perl中,没有模块可以更容易地翻译。

sub convert_to_base {
    my ($n, $b) = @_;
    my @digits;
    while ($n) {
        my $digits = $n % $b;
        unshift @digits, $digit;
        $n = ($n - $digit) / $b;
    }
    unshift @digits, 0 if !@digits;
    return @digits;
}
# Whatever characters you want to use.
my @digit_set = ( '0'..'9', 'a'..'z', 'A'..'Z' );
# The id of the record in the database,
# or one more than the last id you generated.
my $id = 1;
my $converted =
    join '',
    map { $digit_set[$_] }
    convert_to_base($id, 0+@digits_set);

我需要一些类似于你想要完成的事情。我重组了我的代码来生成文件夹,所以试试这个。它是为控制台应用程序设置的,但你也可以在网站中使用它。

    private static void genRandomFolders()
    {
        string basepath = "C:\Users\{username here}\Desktop\";
        int count = 5;
        int length = 8;
        List<string> codes = new List<string>();
        int total = 0;
        int i = count;
        Random rnd = new Random();
        while (i-- > 0)
        {
            string code = RandomString(rnd, length);
            if (!codes.Exists(delegate(string c) { return c.ToLower() == code.ToLower(); }))
            {
                //Create directory here
                System.IO.Directory.CreateDirectory(basepath + code);
            }
            total++;
            if (total % 100 == 0)
                Console.WriteLine("Generated " + total.ToString() + " random folders...");
        }
        Console.WriteLine();
        Console.WriteLine("Generated " + total.ToString() + " total random folders.");
    }
    public static string RandomString(Random r, int len)
    {
        //string str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; //uppercase only
        //string str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"; //All
        string str = "abcdefghjkmnpqrstuvwxyz123456789"; //Lowercase only
        StringBuilder sb = new StringBuilder(); 
        while ((len--) > 0)
            sb.Append(str[(int)(r.NextDouble() * str.Length)]);
        return sb.ToString(); 
    }

相关内容

  • 没有找到相关文章

最新更新