首页 > 其他 > 详细

15位身份证号转18位

时间:2014-04-12 23:27:34      阅读:624      评论:0      收藏:0      [点我收藏+]
    老一辈的身份证号码是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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!