老一辈的身份证号码是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
{
if (OldIdNo.Length ==
15)
{
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
15位身份证号转18位,布布扣,bubuko.com
15位身份证号转18位
原文:http://www.cnblogs.com/530263009QQ/p/3660550.html