首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安全序列号生成

安全序列号生成
EN

Software Engineering用户
提问于 2014-11-01 08:58:26
回答 1查看 1.3K关注 0票数 2

我想要生成一个6位数字的序列号,范围从A(只有大写允许)。

代码语言:javascript
复制
serial = "ABCDEF"

问题是,有些字母被认为与其他字母/数字混淆。

代码语言:javascript
复制
U <-> V
O <-> 0 (number)
I <-> 1 (number)

那么,是否有任何现有的安全字母可以作为种子来生成一个安全的序列号?

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2014-11-01 09:59:05

取决于您使用的字体:

  • B(在视觉上与数字8没有太大的区别)
  • C(对于某些字体,与O的差别可能几乎不明显),
  • D(基于与C相同的理由),
  • 我(是数字1吗?)
  • 0(是数字0吗?),
  • Q(对于某些字体,与O的差别可能几乎不明显),

请注意,不应该只排除对中的一个字符(例如0/O中的O),而是同时排除(O和0)。用户不会知道您将他们排除在外,除非您通过在文本框中输入这些字符时触发一些视觉响应来使其变得明显。作为一个例子,几年前,我写了一个自定义的验证码,实际上,像"B“这样的字符被排除在外。在“验证法”之下,有一段文字:

图像不包含以下字符: B、D、I和O。

根据日志,仍然有许多用户尝试了这四个字符。修改“人道协调中心”,使之:

图像不包含以下字符B、D、I、O、0、1和8。

有帮助,因为不再有任何歧义。后来,删除这段文字并没有降低成功率。

与其排除字母,您还可以尝试以下选项:

  1. 选择了一种特别清晰的字体。例如,维基百科上的切线零页面讨论了"0/O“的特定方面。另一个例子是,当像这样写的时候:0/O,很明显哪一个是数字,哪个是大写字母。
  2. 如果序列不是打印在软件包上,而是以数字形式提供的,那么就可以很容易地复制粘贴。例如,许多产品使用5个文本框将25个字符的序列号分成5组,但允许您复制粘贴整个序列号,自动处理破折号。
  3. 只使用数字。在这种情况下,要么以1到9的数字启动所有序列号,要么处理用户不输入前导零的情况:当不得不输入序列(如003197 )时,一些用户将按原样输入它,而其他用户则只输入最后四位数。

另外,在你的连载中放空格或破折号。比较一下左边的和右边的:

代码语言:javascript
复制
5F91PS           5F-91-PS
CY4BIW           CY-4B-IW
ZHL0A2           ZH-L0-A2

右边的字体更容易打字和在手机上拼写(这也是微软的串行词包含破折号的原因,尽管它们的长度(25个字符)使它们很难键入)。

票数 3
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/261510

复制
相关文章

相似问题

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