有人知道如何解决这个C#数学算法吗?
控制编号通过将“社会安全号码”中的每个数字乘以2和1(从2开始)来计算。然后它计算并加在一起。
控制编号应等于10除以正确并通过。
Ex,720310-1212“社会安全号码”
7* 2 = 14 --> 1+4 2* 1 = 2 --> 2 0* 2 = 0 --> 0 3* 1 = 3 --> 3 1* 2 = 2 --> 2 0* 1 = 0 --> 0 1* 2 = 2 --> 2 2* 1 = 2 --> 2 1* 2 = 1 --> 2 2* 1 = 2 --> 2
然后添加1 + 4 + 2 + 0 + 3 + 2 + 0 + 2 + 2 + 2 + 2 = 20
20/10 = 2通过!
答案 0 :(得分:11)
你需要:
char.GetNumericValue
获取每个输入字符的数值%
在末尾计算除以10的余数。应该够简单。功课?
修改强>
LINQ解决方案:
var valid = "720310-1212"
.Where(c => char.IsDigit(c))
.Select(c => (int)char.GetNumericValue(c))
.Select((x, i) => x * (2 - i % 2))
.Select(x => x % 10 + x / 10)
.Sum() % 10 == 0;
答案 1 :(得分:2)
我认为你在描述Luhn algorithm(也称为mod 10)。它用于验证信用卡(和其他东西)。 E-Commerce Tip: Programmatically Validate Credit Card Numbers处有一个C#实现。