c# - 生成 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 无效代码
解决方案
假设该函数Rand(n)
创建了一个随机整数,可以从0
高达n
(n
包括),那么您可以执行以下操作:
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];
...
我只是很快就写下来了,我没有检查边界,但是这样的算法应该可以解决问题。
推荐阅读
- java - 带有 GET、OPTIONS 方法的 Axios 401
- javascript - 如何通过单击反应中的轮播图像进行导航
- javascript - 有没有办法检查输入值是否包含特定的键码?
- javascript - 检查同级时如何禁用输入?
- javascript - Table.read() 函数给出了 [Object Promise] 如何把它变成数组?Cordova 和 Microsoft Azure 移动应用服务
- excel - 使用 PowerShell 将带有行分隔符的 CSV 导入 Excel
- database - Laravel 从数据库中获取所有行记录的总和
- c# - WPF依赖属性中的每个属性吗?
- python - 如何从 Python C API 获取历史记录
- c# - 2 个事件之间的时间延迟问题