有人知道如何解决这个C#数学算法吗?

时间:2009-09-11 22:04:13

标签: c#

有人知道如何解决这个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通过!

2 个答案:

答案 0 :(得分:11)

你需要:

  • 一个累积数字的计数器,
  • 循环输入字符串的循环,
  • char.GetNumericValue获取每个输入字符的数值
  • 一个布尔标志,每次迭代都会更改,以指示是否乘以1或2,
  • 模数运算符%在末尾计算除以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#实现。