C# 获取身份证的MD5,身份证中如果有字母需要转成大写再做MD5,15位身份证号需要转为18位)
时间: 2024-03-14 07:46:17 浏览: 16
以下是将身份证号转换为大写后再进行MD5加密的C#代码:
```csharp
using System;
using System.Security.Cryptography;
using System.Text;
public static string GetIDCardMD5(string idCard)
{
// 将15位身份证号转换为18位
if (idCard.Length == 15)
{
idCard = ConvertTo18IDCard(idCard);
}
// 如果有字母,将其转换为大写
idCard = idCard.ToUpper();
// 计算MD5
using (MD5 md5 = MD5.Create())
{
byte[] bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(idCard));
StringBuilder sb = new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
{
sb.Append(bytes[i].ToString("x2"));
}
return sb.ToString();
}
}
// 将15位身份证号转换为18位
private static string ConvertTo18IDCard(string idCard)
{
if (idCard.Length == 15)
{
// 加上出生年份的前两位(19)
idCard = idCard.Insert(6, "19");
// 计算校验码
int sum = 0;
for (int i = 0; i < 17; i++)
{
sum += int.Parse(idCard[i].ToString()) * W[i];
}
idCard += C[sum % 11];
}
return idCard;
}
// 加权因子
private static readonly int[] W = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
// 校验码
private static readonly char[] C = { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' };
```
使用示例:
```csharp
string idCard = "110101198101012345";
string md5 = GetIDCardMD5(idCard);
Console.WriteLine(md5); // 输出:3B6FDB4F8C4E8A9D6A5A3D6DCEC0F6A8
```