首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随机6至10位数

随机6至10位数
EN

Code Review用户
提问于 2014-06-24 09:05:42
回答 2查看 4.8K关注 0票数 4

我正在生成一个随机的数字6-10位密码.我需要你的一些重要评论。可以吗?还是需要修改一下?

代码语言:javascript
复制
val AB = "0123456789669900"
val rnd = new Random()

def randomNumericalString(): String = {
    val len = rnd.nextInt(5) + 5
    val sb = new StringBuilder(len)
    for (i <- 0 to len)
      sb.append(AB.charAt(rnd.nextInt(AB.length())))
    return sb.toString
  }
EN

回答 2

Code Review用户

发布于 2014-06-24 10:41:26

您的算法使得某些数字的概率比其他数字高得多。这是故意的吗?例如,0的出现频率是1的3倍,最好是输入字符串"0123456789",并且具有统一的分布。

您在for -循环中提供的范围是令人困惑的,要求为6位数,但是,您使用魔术数字5。在随机。考虑使用:

代码语言:javascript
复制
val shortest = 6
val longest = 10
val len = shortest + rnd.nextInt(longest - shortest + 1)
for (i <- 1 to len)

这是一个足够的答案,它本身,但我建议你考虑以下几点。它有一点缺陷,因为它从不生成一个以0作为第一个字符的值.当我意识到这一点的时候,我已经回答了这个问题,但我认为你还是应该考虑一下这个方法:

代码语言:javascript
复制
def randomNumericalString(): String = {
    return ((100000.0 + rnd.nextDouble() * (10000000000.0 - 100000.0)).toLong).toString
}

以上将产生一个分布均匀的随机数,介于100000到9999999999 (和在这里,作为一个理想 )之间。

票数 4
EN

Code Review用户

发布于 2014-06-25 02:22:05

例如,如果需要使用数字键盘输入密码,我可以理解是否需要只使用数字密码。通常,只有数字的密码称为PIN,我建议使用该术语.引脚的熵小于字母数字密码,但如果系统采取措施防止暴力攻击,它们仍然是安全的。不过,我无法理解将概率偏向于数字6、9和0的愿望。我相信你也同样困惑,我不会质疑这个奇怪的要求。

一些快速观察:

  • AB是个奇怪的名字。digits呢?
  • for (i <- 0 to n) …很尴尬,很可能会导致错误。编写重复n次的for -循环的逻辑方法是:for (i <- 0直到n)…。或用于(i <- 1至n)…我建议(_ <- 0直到连){ sb.append(digits.charAt(rnd.nextInt(digits.length()))) }从开始
    • 你其实并不关心i的价值
    • 省略可选的大括号是错误的做法

  • Scala允许默认参数值。因此,您可以获得额外的灵活性和清晰的“免费”。

重写…

代码语言:javascript
复制
val digits = "0123456789669900"
val rnd = new Random()

def randomPIN(minLen:Int=6, maxLen:Int=10): String = {
    val len = rnd.nextInt(1 + maxLen - minLen) + minLen
    val sb = new StringBuilder(len)
    for (_ <- 0 until len) {
        sb.append(digits.charAt(rnd.nextInt(digits.length())))
    }
    return sb.toString
}
票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/55098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档