c#中15位转18位身份证代码
时间: 2024-04-05 16:34:57 浏览: 15
以下是 C# 中将 15 位身份证号码转换为 18 位身份证号码的代码:
```csharp
public static string ConvertTo18IDCard(string idCard)
{
if (idCard.Length != 15)
{
return idCard;
}
string idCard17 = idCard.Substring(0, 6) + "19" + idCard.Substring(6);
int sum = 0;
for (int i = 0; i < 17; i++)
{
sum += int.Parse(idCard17[i].ToString()) * int.Parse(Math.Pow(2, 17 - i).ToString()) % 11;
}
string idCard18 = idCard17 + (sum % 11 == 0 ? "1" : (sum % 11 == 1 ? "0" : (sum % 11 == 2 ? "X" : (11 - sum % 11).ToString())));
return idCard18;
}
```
使用方法:
```csharp
string idCard15 = "123456780123456";
string idCard18 = ConvertTo18IDCard(idCard15);
```
相关问题
C# 获取身份证的MD5,身份证中如果有字母需要转成大写再做MD5,15位身份证号需要转为18位)
以下是将身份证号转换为大写后再进行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
```
在c#中实现身份证的输入并以窗体化实现
在 C# 中实现身份证的输入可以通过使用 MaskedTextBox 控件来实现。以下是实现的步骤:
1. 在 Visual Studio 中创建一个 Windows 窗体应用程序项目。
2. 在窗体中添加一个 MaskedTextBox 控件,设置其 Mask 属性为 "000000-00000000-000A",表示身份证号码的格式。
3. 可以通过代码设置 MaskedTextBox 控件的 PromptChar 属性,以指定在输入时使用的占位符。例如,可以将 PromptChar 设置为 '*',表示输入时显示 '*',而不是默认的下划线 '_'
4. 可以使用 MaskedTextBox 控件的 Validating 事件来检查输入是否符合要求。在 Validating 事件中,可以编写代码来验证身份证号码是否正确,并使用 e.Cancel 属性来取消输入,如果输入不正确。
5. 在窗体的 Load 事件中,可以使用代码设置 MaskedTextBox 控件的 Text 属性,以指定默认值。
下面是一个示例代码,演示如何在 C# 中实现身份证的输入并以窗体化实现:
```
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
maskedTextBox1.Text = "000000-00000000-0";
}
private void maskedTextBox1_Validating(object sender, CancelEventArgs e)
{
string id = maskedTextBox1.Text;
if (id.Length != 18)
{
MessageBox.Show("身份证号码长度不正确!");
e.Cancel = true;
}
else if (!Regex.IsMatch(id, @"^\d{6}(19|20)\d{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])\d{3}[\dXx]$"))
{
MessageBox.Show("身份证号码格式不正确!");
e.Cancel = true;
}
}
}
```
在上面的代码中,使用正则表达式验证身份证号码的格式是否正确。如果身份证号码长度不为 18 或格式不正确,则取消输入并显示相应的提示信息。当窗体加载时,将 MaskedTextBox 控件的 Text 属性设置为默认值 "000000-00000000-0"。