一行搞定。
http://expert.csdn.net/Expert/topic/1830/1830978.xml?temp=.5713465

解决方案 »

  1.   

    to  pazee
       兄弟你写的好象不对啊!!!
       你用18位身份证最后一位是x的试试!!!
      

  2.   

    我现在的表里没有了
    我做的程序里面有18万人,身份证号是必填的,
    底下的一个用户就是因为一个身份证号报错而报不上来的,我当时把身份证号码搞过来到向个
    网站去验证了好几次,用户也对了几次都是对的,可你的函数却报是错的!!!
    本想向你请教,可却不能给你老兄发短信!!!
    现在你不在dfw混了?
      

  3.   

    很少去dfw了。这个算法其实很简单,应该不会错,
    那你下次发现了这样的号码告诉我, [email protected] 行吗?
    我也看看。
      

  4.   

    还在不在?
    我这里找了不少,我自己还没验证
    快上msn啊,我加了你了
      

  5.   

    blueshu(绝对是菜鸟)
    谢谢你,因为我现在资料没有了,凭着记忆你看看这回对不对?因为这个W(i) 其实就是 2^(18-i) mod 11  (i 属于[0,17])的结果,
    但是我忘了是17,还是18了。function f(ID: string):string;
    const
      W:array [1..18] of integer = (6,3,7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4);
      A:array [0..10] of char = ('1','0','x','9','8','7','6','5','4','3','2');
    var
      i, j, S: integer;
      NewID: string;
    begin
      if Length(ID) <> 15 then
        result:= ''
      else begin
        NewID:= ID;
        Insert('19', NewID, 7);
        S:= 0;
        try
          for i:=1 to 17 do begin
            j:= StrToInt(NewID[i]) * W[i];
    //        j:= StrToInt(NewID[i]) * ((2 shl (19-i)) mod 11);
            S:= S + j;
          end;
          S:= S mod 11;
          Result:= NewID + A[S];
        except
          result:= '';
        end;
      end;
    end;
      

  6.   

    UP
    同时咨询:那里能下到“查询身份证所属地”的软件。
    当然是不要RMB的!!指点!!
      

  7.   

    你能不能给我几是个数据我看看。
    email给我就好了。