来自字母数字字符串的与语言无关的随机数生成器

时间:2015-11-07 07:18:31

标签: java random parse-platform

我正在编写一个程序,我希望能够从Parse.com中随机生成的两个10个字符的字母数字字符串的种子生成一个设定范围内的随机整数。 (例如:" bGmwcRG6ch"和" 7AdFJ4VyY3")。我也希望生成相同的数字,无论我在运行什么语言。此编号将对应于程序中存储的预定义用户名。

我最麻烦的部分是我希望将来能够添加更多用户名(增加集合的范围),而无需更改每个人的用户名。目前我有200人。

到目前为止(用Java编写):

public String generateUsername(String userId, String chatId)
{
    String s = userId + chatId;

    long seed = 0;

    for (int i = 0; i < s.length(); i++)
    {
        seed = seed + s.charAt(i);
    }

    Log.d("chatId", chatId);
    Log.d("userId", userId);
    Log.d("Seed: ", Long.toString(seed));        
}

日志输出:

11-07 14:58:45.902 10666-10666 /? D / chatId:bGmwcRG6ch

11-07 14:58:45.902 10666-10666 /? D / userId:7AdFJ4VyY3

11-07 14:58:45.902 10666-10666 /? D / Seed :: 1669

非常感谢任何建议。

2 个答案:

答案 0 :(得分:0)

我认为到目前为止你编写的代码是完整和完美的,这个逻辑是来自字母数字字符的语言无关随机数生成器。

因为这会根据字母数字字符的ASCII值计算数值,并且ASCII值对于任何语言都是相同的。 ASCII代表美国信息交换标准码。

答案 1 :(得分:0)

一种解决方案是标准散列,可以是缓慢但安全的加密散列,如SHA-1,也可以是更快,安全性较低的非加密散列,如FNV。无论哪种情况,请务必仔细指定格式。例如,带有BOM的UTF-8具有与没有BOM的UTF-8不同的字节模式。