我正在编写一个程序,希望能够从Parse.com随机生成的两个10个字符的字母数字字符串的种子中生成一个集合范围内的随机整数。(例如:"bGmwcRG6ch"one_answers"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:7和FJ4VyY3
11-07 14:58:45.902 10666-10666/?D/种子::1669
任何建议都将不胜感激。
我认为到目前为止您编写的代码是完整和完美的,这个逻辑是由字母数字字符生成的独立于语言的随机数生成器。
因为这是根据字母数字字符的ASCII值计算Numeric值,并且ASCII值对于任何语言都是相同的。ASCII代表美国信息交换标准代码。
一种解决方案是标准哈希,要么是像SHA-1这样缓慢但安全的加密哈希,要么像FNV这样更快、不太安全的非加密哈希。在任何一种情况下,请务必仔细指定格式。例如,带有BOM的UTF-8与没有BOM的UTF-8具有不同的字节模式。