用DELPHI函数判断是否有效18位身份证号

uses DateUtils;

const
  IntMultiplication: Array[1..17] Of Integer=(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);

//函数名:IsRightID
//参数:sID,身份证号码 (输入)
//      sSex,性别       (输出)
//      age,年龄        (输出)
//返回值:sID是标准身份证号,返回OK,否则返回相应信息
function IsRightID(sID:string;var sSex:string;var age:Integer):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(sID)<>18 then
    begin
      Result:=‘身份证号应为18位!‘;
      exit;
    end;
    if not JudgeIllegal(Copy(sID,1,17)) then
    begin
      Result:=‘身份证号前17位应为数字!‘;
      exit;
    end;
    //判断成功
    if (Weighted(sID)=Copy(sID,18,1)) then
    begin
      Result:=‘OK‘;
      //判断性别
      if (StrToInt(Copy(sID,17,1)) mod 2)=0 then
        sSex:=‘女‘
      else
        sSex:=‘男‘;
      //计算年龄
      age:=Yearof(Now)-StrToInt(Copy(sID,7,4));
    end
    else
    begin
      Result:=‘身份证号码有误!‘;
    end
  except
    on e:Exception do
    begin
      Result:=‘异常:‘+e.Message;
    end;
  end;
end;

时间: 2024-09-29 09:05:07

用DELPHI函数判断是否有效18位身份证号的相关文章

18位身份证号验证及信息获取

止乎于分享! IDCode18 = { validate: function (value) { if (value.length != 18) return false; var value = value.toLowerCase(); var sum = 0, v = '10x98765432', w = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2], a = '11,12,13,14,15,21,22,23,31,32,33,3

正则表达式之完美18位身份证号

匹配18位身份证号,正则表达式如下: /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|31)|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}([0-9]|x|X)$/ 说明:现在身份证号都已经是18位了,没必要再去考虑匹配15位. 18位身份证号组成:6位地区号+4位年+4位月日+3位编号+1位新生成编号 逻辑: 1

中国居民18位身份证号验证方法,Java算法实现

public static boolean validate18Idcard(String idcard){ if(idcard == null ) { return false; } if(idcard.length()!=18) { return false; } char [] id =idcard.toCharArray(); int i, sum, n; for (sum = i = 0; i < 17; i++){ sum += ((1 << (17 - i)) % 11)

PHP隐藏身份证号中间四位(适用老版15位与18位身份证号)

// $message['idcard'] 为数据库查出来的身份证号码,若位数不符合身份证位数则会显示“身份证位数不正常” <? echo strlen($message['idcard'])==15?substr_replace($message['idcard'],"****",8,5):(strlen($message['idcard'])==18?substr_replace($message['idcard'],"****",8,7):"身

python操作redis之随机生成18位身份证号码

写一个随机生成身份证号的程序,输入多少条就产生多少个,?把产生完的数据写到redis里面,key用哈希类型?Xiaohei 410881198312031241 其中配置文件confsetting.py里的常量有: # 系统常量,包含: # LAST_NAME: 姓 # FIRST_NAME: 名 # STATE_CODE:全国大陆地区及编码 REDIS_IP = '172.16.2.163' RedisIp REDIS_PORT = 6379 REDIS_PASSWD = '222333' R

js验证15位或18位身份证

本篇文章是本人在网上搜集了一些验证,然后又个人进行一定修改的关于身份证的验证,欢迎修改指正..... function IdCardValidateRule(idCard) { var tip;    //1.传入15位或者18位身份证号码,18位号码末位可以为数字或X    idCard = idCard.toUpperCase();    //2.去掉身份证的左右空格    idCard = trim(idCard);    //3.判断输入的身份证长度    if (!(/(^\d{15}

18位身份证验证--java实现,正则表达式

简单的正则表达式: (1)preg_match("/^(\d{18,18}|\d{15,15}|\d{17,17}x)$/",$id_card)(2)preg_match("/^(\d{6})(18|19|20)?(\d{2})([01]\d)([0123]\d)(\d{3}) (\d|X)?$/",$id_card)(3)preg_match("/(^\d{15}$/)|(\d{17}(?:\d|x|X)$/),$id_card) 2.复杂并且严格一些的

C#实现的18位身份证格式验证算法

18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999<公民身份号码>中做了明确的规定. GB11643-1999<公民身份号码>为GB11643-1989<社会保障号码>的修订版,其中指出将原标准名称"社会保障号码"更名为"公民身份号码",另外GB11643-1999<公民身份号码>从实施之日起代替GB11643-1989.GB11643-1999<公民身份号码>主要内容如

java 18位身份证验证小组件idchecker

原文:java 18位身份证验证小组件idchecker 源代码下载地址:http://www.zuidaima.com/share/1550463500012544.htm 代码运行结果: 其它调用方法: package com.zuidaima.idchecker.test; import cn.idchecker.check.Checker; /** * idchecker测试 * @author http://www.zuidaima.com * */ public class Test