15位身份证号转18位
老一辈的身份证号码是15位的,今天写了个函数转成18位的。放在日志里,备份一下。恐以后用的到。
const
IntMultiplication: Array[1..17] Of Integer=(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
//转换身份证号
//参数:旧15位身份证号。返回值:新18位身份证号
function IdNoTransform(OldIdNo:string):string;
//判断是否存在非法字符
function JudgeIllegal(str:string):Boolean;
var
i:Integer;
begin
Result:=False;
for i := 1 to Length(str) do
begin
case str[i] of '0'..'9':
begin
end
else
begin
Exit;
end;
end;
end;
Result := True;
end;
function Weighted(str:string):string;
var
i:Integer;
sum:Integer;
begin
sum:=0;
for i:=1 to 17 do
begin
sum:=sum+StrToInt(str[i])*IntMultiplication[i];
end;
sum:=sum mod 11;
case sum of
0 : Result:='1';
1 : Result:='0';
2 : Result:='X';
3 : Result:='9';
4 : Result:='8';
5 : Result:='7';
6 : Result:='6';
7 : Result:='5';
8 : Result:='4';
9 : Result:='3';
10: Result:='2';
end;
end;
begin
Result:='';
try
if Length(OldIdNo)<>15 then
begin
Result:='旧身份证号尾数不符,应为15位!';
exit;
end;
if not JudgeIllegal(OldIdNo) then
begin
Result:='旧身份证号格式不符,应为数字!';
exit;
end;
Result:=Copy(OldIdNo,1,6);
Result:=Result+'19';
Result:=Result+Copy(OldIdNo,7,15);
Result:=Result+Weighted(Result);
except
on e:Exception do
begin
Result:=e.Message;
end;
end;
end;
C#版
#region 身份证号码标准化
private string IdNoTransform(string OldIdNo)
{
//函数返回值
string status = string.Empty;
//循环用变量
int i;
//求和
int sum = 0;
int[] IntMultiplication = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
try
{
const
IntMultiplication: Array[1..17] Of Integer=(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
//转换身份证号
//参数:旧15位身份证号。返回值:新18位身份证号
function IdNoTransform(OldIdNo:string):string;
//判断是否存在非法字符
function JudgeIllegal(str:string):Boolean;
var
i:Integer;
begin
Result:=False;
for i := 1 to Length(str) do
begin
case str[i] of '0'..'9':
begin
end
else
begin
Exit;
end;
end;
end;
Result := True;
end;
function Weighted(str:string):string;
var
i:Integer;
sum:Integer;
begin
sum:=0;
for i:=1 to 17 do
begin
sum:=sum+StrToInt(str[i])*IntMultiplication[i];
end;
sum:=sum mod 11;
case sum of
0 : Result:='1';
1 : Result:='0';
2 : Result:='X';
3 : Result:='9';
4 : Result:='8';
5 : Result:='7';
6 : Result:='6';
7 : Result:='5';
8 : Result:='4';
9 : Result:='3';
10: Result:='2';
end;
end;
begin
Result:='';
try
if Length(OldIdNo)<>15 then
begin
Result:='旧身份证号尾数不符,应为15位!';
exit;
end;
if not JudgeIllegal(OldIdNo) then
begin
Result:='旧身份证号格式不符,应为数字!';
exit;
end;
Result:=Copy(OldIdNo,1,6);
Result:=Result+'19';
Result:=Result+Copy(OldIdNo,7,15);
Result:=Result+Weighted(Result);
except
on e:Exception do
begin
Result:=e.Message;
end;
end;
end;
C#版
#region 身份证号码标准化
private string IdNoTransform(string OldIdNo)
{
//函数返回值
string status = string.Empty;
//循环用变量
int i;
//求和
int sum = 0;
int[] IntMultiplication = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
try
{
if (OldIdNo.Length == 15)
{
for (i = 0; i < 15; i++)
{
if ((OldIdNo[i] >= '0') && (OldIdNo[i] <= '9'))
{
continue;
}
else
{
status = "XXXXXXXXXXXXXXXXXX";
return status;
}
}
{
for (i = 0; i < 15; i++)
{
if ((OldIdNo[i] >= '0') && (OldIdNo[i] <= '9'))
{
continue;
}
else
{
status = "XXXXXXXXXXXXXXXXXX";
return status;
}
}
OldIdNo = OldIdNo.Substring(0, 6) + "19" + OldIdNo.Substring(6, 9);
for (i = 0; i < 17; i++)
{
sum = sum + int.Parse(OldIdNo[i].ToString())* IntMultiplication[i];
}
sum = sum % 11;
switch (sum)
{
case 0: status = "1"; break;
case 1: status = "0"; break;
case 2: status = "X"; break;
case 3: status = "9"; break;
case 4: status = "8"; break;
case 5: status = "7"; break;
case 6: status = "6"; break;
case 7: status = "5"; break;
case 8: status = "4"; break;
case 9: status = "3"; break;
case 10: status = "2"; break;
}
status = OldIdNo + status;
}
else if (OldIdNo.Length == 18)
{
status = OldIdNo.Replace("x", "X");
}
else
{
status = "XXXXXXXXXXXXXXXXXX";
}
}
catch (Exception Ex)
{
status = "XXXXXXXXXXXXXXXXXX";
}
return status;
}
#endregion
for (i = 0; i < 17; i++)
{
sum = sum + int.Parse(OldIdNo[i].ToString())* IntMultiplication[i];
}
sum = sum % 11;
switch (sum)
{
case 0: status = "1"; break;
case 1: status = "0"; break;
case 2: status = "X"; break;
case 3: status = "9"; break;
case 4: status = "8"; break;
case 5: status = "7"; break;
case 6: status = "6"; break;
case 7: status = "5"; break;
case 8: status = "4"; break;
case 9: status = "3"; break;
case 10: status = "2"; break;
}
status = OldIdNo + status;
}
else if (OldIdNo.Length == 18)
{
status = OldIdNo.Replace("x", "X");
}
else
{
status = "XXXXXXXXXXXXXXXXXX";
}
}
catch (Exception Ex)
{
status = "XXXXXXXXXXXXXXXXXX";
}
return status;
}
#endregion
浙公网安备 33010602011771号