身份证15位转18位小工具
- 格式:xls
- 大小:15.50 KB
- 文档页数:2


⾝份证15位转18位(SQL函数)USE [您的数据库名]GO/****** Object: UserDefinedFunction [dbo].[get18id] Script Date: 10/10/2014 16:32:15 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Author:-- Create date:-- Description:-- =============================================CREATE FUNCTION [dbo].[get18id](-- Add the parameters for the function here@id nvarchar(18))RETURNS nvarchar(18)ASBEGIN-- Declare the return variable hereDECLARE @myresult nvarchar(18),@ids nvarchar(17),@idindex int,@idsum int,@idcharnumber tinyint,@idmod int,@idlast char-- check input rightif(@id is null or @id='')beginRETURN nullendif(LEN(@id)<>15)beginif(LEN(@id)<>18)beginreturn nullendreturn @idendset @idindex=1;-- birthday year defoult is '19'set @ids=SUBSTRING(@id,1,6)+'19'+SUBSTRING(@id,7,9);--RETURN @ids;while(@idindex<=18)beginset @idcharnumber=convert(tinyint,SUBSTRING(@ids,@idindex,1));--return @idcharnumber;--print @idcharnumber+'\n';if(@idindex=1)beginset @idsum=7*@idcharnumber;--return @idsum;endelse if(@idindex=2)beginset @idsum+=9*@idcharnumber;endelse if(@idindex=3)beginset @idsum+=10*@idcharnumber; endelse if(@idindex=4)beginset @idsum+=5*@idcharnumber; endelse if(@idindex=5)beginset @idsum+=8*@idcharnumber; endelse if(@idindex=6)beginset @idsum+=4*@idcharnumber; endelse if(@idindex=7)beginset @idsum+=2*@idcharnumber; endelse if(@idindex=8)beginset @idsum+=1*@idcharnumber; endelse if(@idindex=9)beginset @idsum+=6*@idcharnumber; endelse if(@idindex=10)beginset @idsum+=3*@idcharnumber; endelse if(@idindex=11)beginset @idsum+=7*@idcharnumber; endelse if(@idindex=12)beginset @idsum+=9*@idcharnumber; endelse if(@idindex=13)beginset @idsum+=10*@idcharnumber; endelse if(@idindex=14)beginset @idsum+=5*@idcharnumber; endelse if(@idindex=15)beginset @idsum+=8*@idcharnumber; endelse if(@idindex=16)beginset @idsum+=4*@idcharnumber; endelse if(@idindex=17)beginset @idsum+=2*@idcharnumber; endset @idindex=@idindex+1;--break;end--return @idsum;set @idmod=@idsum%11;if(@idmod=0)beginset @idlast='1';endelse if(@idmod=1)beginset @idlast='0';endelse if(@idmod=2)beginset @idlast='X';endelse if(@idmod=3)beginset @idlast='9';endelse if(@idmod=4)beginset @idlast='8';endelse if(@idmod=5)beginset @idlast='7';endelse if(@idmod=6)beginset @idlast='6';endelse if(@idmod=7)beginset @idlast='5';endelse if(@idmod=8)beginset @idlast='4';endelse if(@idmod=9)beginset @idlast='3';endelse if(@idmod=10)beginset @idlast='2';endset @myresult=@ids+@idlast; -- Return the result of the function RETURN @myresultENDGO。
题目:身份证号码15位到18位转换一、语言和环境A 、 实现语言JavaB 、 环境要求JDK1.4以上版本及其联机帮助文档二、要求本软件是某社会保障信息管理系统的子模块,工作人员从网页上调用,可以根据参保人的15位身份证号码,计算出18位身份证号,同时显示该参保人的出生日期和性别。
程序的功能要求如下:1:设计一个有图形用户界面的Applet ,将Applet 背景色设为浅灰色,接受用户输入15位身份证号码;2:判断输入身份证号位数是否正确,判断输入是否有效(如输入非数字字符),否则提示用户重新输入;3:计算18位身份证号码;4:根据身份证号的第7-14位(YYYYMMDD )。
显示出生日期;5:根据身份证号的第17位(奇数位男性,偶数位女性),显示性别;6:生成一个用于显示Applet 的html 文件。
限制条件:只考虑20世纪(即1900-1999)出生的参保人;不考虑出生日期是否有效。
三、算法说明身份证号15位到18位转换算法:1:在6位行政区划后插入2位世纪代码(如19),构成四位出生年份,得到17位号码; 2:把17位号码从高位到低位与下列17个数字分别相乘求和(N ):「2,4,8,5,10,9,7,3,6,1,2,4,8,5,10,9,7」比如身份证号码为:1716321C C C C C ⋯⋯则74211617⨯+⋯⋯+⨯+⨯=C C C N ;3:将N 除以11取余数R ,根据余数计算尾数T ;1) 如果R =0,则T =1;如果R=1,则T=0;如果R=2,则T=X;2) 如果R=3,则T=9;如果R=4,则T=8;依此类推……;如果R=10,则T=2; 4:将尾数T 添加到17位号码后即得到18位号码。
四、推荐实现步骤1、 设计用户界面Applet 用户界面组件包括:A 、 一个用于显示标题“身份证号码15位到18位转换”的标签;B 、 四个提示标签,分别显示“15位身份证号”,“18位身份证号”,“出生日期”,“性别”;C 、 一个用于输入15位身份证号的文本框;D 、 三个显示计算结果的标签,分别显示18位身份证号、出生日期和性别;E、一个用于显示提示信息的标签;F、两个按钮,一个位“转换”,判断输入的15位身份证号是否有效,无效则给出错误信息,有效则计算18位身份证号并显示结果;另一个按钮“重新输入”,清除输入文本框和三个输出标签,提示信息标签设为“请重新输入”。