【问题标题】:How can I generate booking code in the vue?如何在 vue 中生成预订代码?
【发布时间】:2020-10-19 19:56:44
【问题描述】:

我尝试这样:

methods: {
    generateCode () {
      const letters = '1217CHELS323412eafoo'
      const uniqueId = function () {
        let text = ''
        for (let i = 0; i < 6; i++) {
          text += letters.charAt(Math.floor(Math.random() * letters.length))
        }
        return text
      }
      return uniqueId()
    }
}

一些结果示例::L1LE3Co23H1fHeLe34

这段代码完美吗?我的意思是每次调用这个方法,它肯定会生成一个唯一的预订码

【问题讨论】:

  • 我推荐使用nanoid。非常容易集成并且重复的变化要低得多
  • 这不确定它是否会生成一个唯一的 ID。您可以添加时间并对其进行哈希处理。或者您可以在使用之前检查生成的代码是否已经在您的数据库中生成。
  • @Player1 如果一定要查数据库,最好还是后台生成
  • @Luke Hol 好的,我会检查的

标签: javascript vue.js vuejs2 vue-component unique-key


【解决方案1】:

你的字母选择很少,而且你只生成6个字符的代码,我做了一个简单的脚本来检查你需要生成多少次才能匹配到LS73ea

12787899 times
20141743 times
31479934 times
18819863 times
30361586 times
5533616 times
6495725 times
13431128 times
29765633 times
18367311 times

重复的可能性很高。

我不明白您为什么要在 letters 中包含相同的字符。相反,请执行以下操作:

methods: {
    generateCode () {
      // Alphanumeric
      const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
      const uniqueId = function () {
        let text = ''
        for (let i = 0; i < 8; i++) {
          text += characters.charAt(Math.floor(Math.random() * characters.length))
        }
        return text
      }
      return uniqueId()
    }
}

该函数将生成类似HrsK9wgF的代码,并且重复的机会更少,如果您想使其更低,您还可以:

  1. 在字母选择中添加更多字符,如符号(-_
  2. 增加生成的代码长度

作为参考,Youtube的视频id使用A-Za-z0-9-_进行字符选择,长度为11个字符。

除此之外,您确定要在前端应用上生成 ID 吗?它似乎应该在您的后端应用程序上生成。

【讨论】:

  • const letters = '1217CHELS323412eafoo' 取自用户的输入。它是预订日期、电子邮件、手机和卡号的组合。所以我必须把它改成const letters = 'abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ-1234567890'
  • 是的,如果你想包含-_,或者你可以只使用abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890并让生成的代码更长,比如10或11个字符
  • 好的。我需要这样的var timestamp = new Date().getUTCMilliseconds();stackoverflow.com/questions/8012002/…吗?
  • 这完全取决于您,取决于您的用例,如果您想在预订代码中包含日期/时间,那么您可以添加它并与您当前的方法混合,因此代码将看起来像这样20200630a1b2c3d4(将日期 30-06-2020 与随机字母数字混合),但如果您只想要一个随机的唯一代码并想确保没有重复,那么生成至少 8 个字符长度的字母数字就足够了
  • 好的,谢谢。看来我会用这个:const letters = 'abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ-1234567890'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-24
  • 2012-12-11
  • 1970-01-01
  • 2021-05-04
  • 2017-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多