首页 > 解决方案 > 生成 6 个字符的字母数字代码的正确方法是什么,其中所有字符的总和等于 9?(凭证代码生成器)

问题描述

我的第一个想法是创建一个数组/列表,为每个字符分配值。例如:

数组[0] ='0'

数组[10] = 'A'

[...]

然后代码将在插槽 1 的 [0,x] 之间选择一个随机数 y。对于下一个插槽 [0,(xy)] 等。当 y <= 0 时,用“0”填充其余的插槽。

这对于一个简单的凭证代码生成器就足够了吗?(使用此规则进行加密不是我的决定)

我担心 9 的总和对于 6 个字符代码来说非常低,根本不会使用字母,因为它们的值都超过 9。为了防止这样的情况:540000、630000、180000 我应该让“0”的机会出现更多?

你们怎么看?也许你也可以建议一些其他的方式来做到这一点。

@编辑

例子:

112320 = 1+1+2+3+2+0 = 9 有效代码,总和等于 9

000900 = 0+0+0+9+0+0 = 9 有效代码,总和等于 9

003015 = 0+0+3+0+1+5 = 9 有效代码,总和等于 9

A0012B = 10+0+0+1+2+11 = 24 无效代码

标签: c#randomalphanumeric

解决方案


假设该函数Rand(n)创建了一个随机整数,可以从0高达nn包括),那么您可以执行以下操作:

Sum = 0;
A[0] = Rand(9);
Sum += A[0];
A[1] = Rand(9 - Sum);
Sum += A[1];
A[2] = Rand(9 - Sum);
Sum += A[2];
...

我只是很快就写下来了,我没有检查边界,但是这样的算法应该可以解决问题。


推荐阅读