| 网站首页 | 新闻快报 | 软件教程 | 硬件教程 | 设计学院 | Q Q 专区 | 编程开发 | 网络安全 | 
您现在的位置: 浩扬网络 >> 编程开发 >> delphi >> 教程正文
一个完整身份证效验程序
作者:不详 文章来源:安全中国 点击数: 更新时间:2006-8-5 1:02:47

根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,
公民身份号码是特征组合码18位:由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码。生日期码表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。顺序码表示同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。顺序码的奇数分给男性,偶数分给女性。
15位:六位数字地址码,六位数字出生日期码,三位数字顺序码和一位数字校验码。
var
    codeInfoTst: Tstrings; //总
    codeTst: Tstrings; //代码
    InfoTst: Tstrings; //地址信息

function identityInfo(identitycode: string): string;
//由年月日判断是否为有效日期
    function IsDate(Year, Month, Day: string): Boolean;
    var
        st: string;
    begin

        st := Year + '-' + Month + '-' + day;
        try
            StrToDate(st);
            Result := True;
        except

            Result := False;

        end;
    end;


    function getdetailedFromCode(code: string): string; //由身份证的前六位获得省份县市信息
    var
        Index: integer;
        St: string;
    begin
        index := codeTst.IndexOf(code);
        if index = -1 then
        begin
            Result := '';
            exit;
        end;
        st := infoTst[index]; //县
        code := copy(code, 1, 4) + '00';
        index := codeTst.IndexOf(code);
        if index = -1 then
        begin
            Result := st;
            exit;
        end;
        st := infoTst[index] + st; //市

        code := copy(code, 1, 2) + '0000';
        index := codeTst.IndexOf(code);
        if index = -1 then
        begin
            Result := st;
            exit;
        end;
        st := infoTst[index] + st; //省
        Result := st;



    end;

var
    YLYear, YLMonth, YlDay, id, sex, code: string;
    E: integer;
    St: string;

begin


    e := Length(identitycode);
    if (e <> 18) or (e <> 15) then result := '';
    if (e = 18) then
    begin
        YLYear := copy(identitycode, 7, 4);
        YlMonth := copy(identitycode, 11, 2);
        YLday := copy(identitycode, 13, 2);
        id := copy(identitycode, 18,1);
    end;
    if (e = 15) then
    begin
        YLYear := '19' + copy(identitycode, 7, 2);
        YlMonth := copy(identitycode, 9, 2);
        YLday := copy(identitycode, 11, 2);
        id := copy(identitycode, 15, 1);
    end;
    st := '';
    if IsDate(YlYear, YlMonth, Ylday) then
    begin
        st := YLYear + '年' + YlMonth + '月' + YLday + '日生'
    end;
    code := copy(identitycode, 1, 6);
    st := getdetailedFromCode(code) + ':' + st;


    if (StrToInt(id) mod 2 = 1) then
    begin
        sex := '男';
    end
    else
    begin
        sex := '女';
    end;
    st := st + ':' + sex + '性!' + Trim(IntToStr(e)) + '位证号!';
    Result := st;



end;

procedure TForm1.Button1Click(Sender: TObject);
var
    i, num: integer;
    code, info: string;
begin


    codeInfoTst := Tstringlist.Create;
    CodeTst := Tstringlist.Create;
    infotst := Tstringlist.Create;
    try
        codeInfoTst.LoadFromFile('c:\code.txt');
        //分解代码地址信息
        num := Codeinfotst.Count;
        for i := 0 to num - 1 do
        begin
            code := copy(Codeinfotst[i], 1, 6);
            Info := copy(Codeinfotst[i], 8, length(Codeinfotst[i]) - 7);
            codetst.Add(code);
            infotst.Add(info);

        end;
        showmessage(identityInfo('530101700205379'));

    finally
        codeTst.Free;
        infotst.Free;
        CodeinfoTst.Free;
    end;



end;

end.
code.txt内容如下,你可以扩展
150000,内蒙古自治区
150100,呼和浩特市
150101,呼和浩特市辖区
150105,郊区
150121,土默特左旗
150122,托克托县
150123,武川县
150124,和林格尔县
150125,清水河县
150200,包头市
150201,包头市辖区
150205,石拐矿区
150206,白云矿 区
150207,郊区
150221,土默特右旗
150222,固阳县
150223,达尔罕茂明安旗
150300,乌海市
150302,海勃湾区
150303,海南区
150304,乌达区
150400,赤峰市
150402,红山区
150403,元宝山区
150404,松山区
150421,阿鲁科尔沁旗
150422,巴林左旗
150423,巴林右旗
150424,林西县
150425,克什克腾旗
150426,翁牛特旗
150428,喀喇沁旗
150429,宁城县
150430,敖汉旗
152100,呼伦贝尔盟
152101,海拉尔市
152102,满洲里市
152103,扎兰屯市
152104,牙克石市
152122,阿荣旗
152123,莫力达瓦旗
152125,额尔古纳右旗
152126,额尔古纳左旗
152127,鄂伦春旗
152128,鄂温克旗
152129,新巴尔虎右旗
152130,新巴尔虎左旗
152131,陈巴尔虎旗
152200,兴安盟
152201,乌兰浩特市
152202,阿尔山市
152221,科尔沁右翼前旗
152222,科尔沁右翼中旗
152223,扎赉特旗
152224,突泉县
152300,哲里木盟
152301,通辽市
152302,霍林郭勒市
152322,科尔沁左翼中旗
152323,科尔沁左翼后旗
152324,开鲁县
152325,库伦旗
152326,奈曼旗
152327,扎鲁特旗
152500,锡林郭勒盟
152501,二连浩特市
152502,锡林浩特市
152522,阿巴嘎旗
152523,苏尼特左旗
152524,苏尼特右旗
152525,东乌珠穆沁旗
152526,西乌珠穆沁旗
152527,太仆寺旗
152528,镶黄旗
152529,正镶白旗
152530,正兰旗
152531,多伦县
152600,乌兰察布盟
152601,集宁市
152624,卓资县
152625,化德县
152626,商都县
152627,兴和县
152628,丰镇县
152629,凉城县
152630,察哈尔右翼前旗
152631,察哈尔右翼中旗
152632,察哈尔右翼后旗
152634,四子王旗
152700,伊克昭盟
152701,东胜市
152722,达拉特旗
152723,准格尔旗
152724,鄂托克前旗
152725,鄂托克旗
152726,杭锦旗
152727,乌审旗
152728,伊金霍洛旗
152800,巴彦淖尔盟
152801,临河市
152822,五原县
152823,磴口县
152824,乌拉特前旗
152825,乌拉特中旗
152826,乌拉特后旗
152827,杭锦后旗
152900,阿拉善盟
152921,阿拉善左旗
152922,阿拉善右旗
152923,额济纳旗
153000,黑龙江
153100,吉林
153200,辽宁
153300,河北
153400,山西
153500,陕西
153600,甘肃
153700,宁夏
153800,接边调整
500000,重庆市
500200,重庆直属
500201,渝中区
500211,江北区
500212,沙坪坝区
500213,九龙坡区
500214,南岸区
500215,北碚区
500216,万盛区
500217,双桥区
500221,长寿县
500222,巴南区
500223,綦江县
500224,渝北区
500225,江津市
500226,合川市
500227,潼南县
500228,铜梁县
500229,永川市
500230,大足县
500231,荣昌县
500232,璧山县
501200,重庆万州移民开发区
501202,龙宝
501203,天城
501204,五桥
501222,开县
501223,忠县
501224,梁平县
501225,云阳县
501226,奉节县
501227,巫山县
501228,巫溪县
501229,城口县
502300,涪陵市
502311,涪陵区
502322,垫江县
502323,南川市
502324,丰都县
502326,武隆县
503500,黔江地区
503521,石柱县国土局
503522,秀山县
503523,黔江县
503524,酉阳县国土局
503525,彭水县国土局
520000,贵州省
520100,贵阳市
520102,南明区
520103,云岩区
520104,小河镇
520111,花溪区
520112,乌当区
520113,白云区
520114,修文县
520115,开阳县
520116,息烽县
520117,清镇市
522100,遵义市
522101,红花岗区
522102,赤水市
522103,仁怀市
522121,遵义县
522122,桐梓县
522123,绥阳县
522124,正安县
522125,道真县
522126,务川县
522127,凤冈县
522128,湄潭县
522129,余庆县
522132,习水县
522200,铜仁地区
522221,铜仁市
522222,江口县
522223,玉屏县
522224,石阡县
522225,思南县
522226,印江县
522227,德江县
522228,沿河县
522229,松桃县
522230,万山特区
522300,黔西南州
522301,兴义市
522322,兴仁县
522323,普安县
522324,晴隆县
522325,贞丰县
522326,望谟县
522327,册亨县
522328,安龙县
522400,毕节地区
522401,毕节市
522422,大方县
522423,黔西县
522424,金沙县
522425,织金县
522426,纳雍县
522427,威宁县
522428,赫章县
522500,安顺地区
522501,安顺市
522526,平坝县
522527,普定县
522528,关岭县
522529,镇宁县
522530,紫云县
522600,黔东南州
522601,凯里市
522622,黄平县
522623,施秉县
522624,三穗县
522625,镇远县
522626,岑巩县
522627,天柱县
522628,锦屏县
522629,剑河县
522630,台江县
522631,黎平县
522632,榕江县
522633,从江县
522634,雷山县
522635,麻江县
522636,丹寨县
522700,黔南州
522701,都匀市
522722,荔波县
522723,贵定县
522724,福泉市
522725,瓮安县
522726,独山县
522727,平塘县
522728,罗甸县
522729,长顺县
522730,龙里县
522731,惠水县
522732,三都县
522800,六盘水市
522821,六枝特区
522822,盘县特区
522823,水城县
522824,钟山区
540000,西藏自治区
540100,拉萨市
540120,城关区
540121,林周县
540122,当雄县
540123,尼木县
540124,曲水县
540125,堆龙德庆
540126,达孜县
540127,墨竹工卡县
542100,昌都地区
542121,昌都县
542122,江达县
542123,贡觉县
542124,类乌齐县
542125,丁青县
542126,察雅县
542127,八宿县
542128,左贡县
542129,芒康县
542132,洛隆县
542133,边坝县
542200,山南地区
542221,乃东县
542222,扎朗县
542223,贡嘎县
542224,桑日县
542225,琼结县
542226,曲松县
542227,措美县
542228,洛扎县
542229,加查县
542231,隆子县
542232,错那县
542233,浪卡子县
542300,日喀则地区
542301,日喀则市
542322,南木林县
542323,江孜县
542324,定日县
542325,萨迦县
542326,拉孜县
542327,昂仁县
542328,谢通门县
【教程录入:残梦    责任编辑:残梦 】
发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
网友评论:(评论内容只代表网友观点,与浩扬网络立场无关!)
热门文章

赞助商


| 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 |