用正则表达式写一个C#代码,将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2
时间: 2024-12-15 11:13:07 浏览: 8
在C#中,你可以使用正则表达式配合字符串处理函数来实现这个需求。首先,你需要创建一个函数来计算每个位置的值,然后遍历身份证号码的每一位,并应用对应的系数。下面是一个简单的示例:
```csharp
using System;
using System.Text.RegularExpressions;
public class IdCardValidator
{
private static readonly string[] Coefficients = { "7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2" };
public static string CalculateIdCardProduct(string idCardNumber)
{
if (!Regex.IsMatch(idCardNumber, @"^\d{17}$")) // 验证身份证号码长度
return "Invalid ID card number";
int sum = 0;
var regex = new Regex(@"(\d)");
foreach (Match match in regex.Matches(idCardNumber))
{
int digit = int.Parse(match.Value);
int coefficient = Coefficients[digit - 1]; // 从字符串数组获取对应位置的系数
sum += coefficient * digit;
}
sum %= 11; // 根据中国身份证校验规则,对总和取模11
return sum == 1 ? "Valid" : $"Invalid (product is {sum})";
}
public static void Main(string[] args)
{
string idCard = "123456789012345678"; // 请输入实际的身份证号码
Console.WriteLine(CalculateIdCardProduct(idCard));
}
}
```
在这个代码里,`CalculateIdCardProduct` 函数接收一个字符串作为输入,检查它是否为17位数字。然后,通过匹配每个数字并获取相应的系数,计算它们的乘积。最后,根据中国身份证验证算法判断结果是否有效。
阅读全文