下載吧 - 綠色安全的游戲和軟件下載中心

          軟件下載吧

          當前位置:軟件下載吧 > 數據庫 > MS_SQL > SQL開發知識:SqlServer2000+ 身份證合法校驗函數的示例代碼

          SQL開發知識:SqlServer2000+ 身份證合法校驗函數的示例代碼

          時間:2024-03-10 11:43作者:下載吧人氣:37

          下面看下sqlserver2000身份證校驗的代碼,具體代碼如下所示:

          /*
          身份校驗行數
          */
          if exists(select * from sysobjects where name=’fun_utils_idnumberoprater’ and type=’FN’)
          drop function fun_utils_idnumberoprater
          go
          create function fun_utils_idnumberoprater
          (
          @idnumber varchar(50)=”
          )
          returns varchar(500)
          as
          /*
          公民身份號碼是由17位數字碼和1位校驗碼組成。排列順序從左至右分別為:6位地址碼,8位出生日期碼,3位順序碼和1位校驗碼。
          地址碼(身份證地址碼對照表見下面附錄)和出生日期碼很好理解,順序碼表示在同一地址碼所標識的區域范圍內,對同年同月同日出生的人編定的順序號,順序碼的奇數分配給男性,偶數分配給女性。
          身份證最后一位校驗碼算法如下:
          1. 將身份證號碼前17位數分別乘以不同的系數,從第1位到第17位的系數分別為:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
          2. 將得到的17個乘積相加。
          3. 將相加后的和除以11并得到余數。
          4. 余數可能為0 1 2 3 4 5 6 7 8 9 10這些個數字,其對應的身份證最后一位校驗碼為1 0 X 9 8 7 6 5 4 3 2。
          function:
          1.校驗身份證有效性
          2.15位身份證轉18位
          */
          begin

          declare @ReturnText varchar(1000) –返回值
          ,@Separator varchar(1) –分隔符

          ,@idnumberElement varchar(1) –身份證每位元素
          ,@CurrentIndex int –身份證號當前索引位
          ,@NextIndex int –身份證號下一個索引位

          ,@xsnumber varchar(50) –系數
          ,@xsElement varchar(2) –系數每位元素
          ,@xsCurrentIndex int –系數當前索引位
          ,@xsNextIndex int –系數下一個索引位

          ,@jym varchar(11) –校驗碼
          ,@sum int –身份證元素*系數求和
          ,@div int –合計對11求余數

          ,@CurrentJym varchar(1) –當前校驗碼
          ,@CurrentWs int –當前身份證位數
          ,@NewJym varchar(1000) –新校驗碼
          ,@NewWs int –新身份證位數
          ,@oldId varchar(20)

          –處理身份證號并校驗位數有效性
          set @Separator =’,’;
          set @CurrentIndex = 1;
          set @xsnumber = ‘7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2’;
          set @xsCurrentIndex = 1;
          set @jym = ’10X98765432′;
          set @sum = 0;
          set @CurrentWs = 0;
          set @CurrentJym = ”;
          set @NewJym = ”;
          set @NewWs = 0;
          set @CurrentWs=len(@idnumber);
          set @oldId = @idnumber;

          if @CurrentWs=15
          begin
          set @idnumber=stuff(@idnumber,7,0,case when substring(@idnumber,13,3) in (‘999′,’998′,’997′,’996′) then ’18’ else ’19’ end);

          SET @CurrentJym = ”;
          end
          else if @CurrentWs>=18
          begin
          set @CurrentJym=substring(@idnumber,18,1);
          set @idnumber=substring(@idnumber,1,17);
          end
          else
          begin
          set @ReturnText=’校驗失敗_’
          goto TheEnd;
          end
          if isdate(substring(@idnumber,7,8))=0
          begin
          set @ReturnText=’校驗失敗_’
          goto TheEnd;
          end
          –計算身份證校驗位
          while(@CurrentIndex<=len(@idnumber))
          begin
          set @NextIndex=@CurrentIndex+1;
          set @xsNextIndex=charindex(@Separator,@xsnumber,@xsCurrentIndex);

          if(@xsNextIndex=0 OR @xsNextIndex IS NULL)
          set @xsNextIndex=len(@xsnumber)+1;

          set @idnumberElement=substring(@idnumber,@CurrentIndex,@NextIndex-@CurrentIndex);
          set @xsElement=substring(@xsnumber,@xsCurrentIndex,@xsNextIndex-@xsCurrentIndex);

          if ISNUMERIC(@idnumberElement) > 0
          set @sum=@sum+cast(@idnumberElement as int)*cast(@xsElement as int)
          else
          begin
          set @ReturnText=’校驗失敗_’;
          goto TheEnd
          end

          set @CurrentIndex=@CurrentIndex+1;
          set @xsCurrentIndex=@xsNextIndex+1;

          end
          set @div=@sum%11;
          set @NewJym=substring(@jym,@div+1,1);
          –校驗身份證校驗位是否出錯
          if (@CurrentJym<>”) and (@NewJym<>@CurrentJym)
          begin
          set @ReturnText=’校驗失敗_’;
          goto TheEnd
          end
          –輸出新的身份證號
          if len(@oldId) > 18
          set @ReturnText=’校驗通過,原始身份證長度非15位或18位_’+(@idnumber+@NewJym)
          else
          set @ReturnText=’校驗通過,原始身份證長度為’+cast(len(@oldId) as varchar)+’位_’+(@idnumber+@NewJym)
          goto TheEnd

          TheEnd:
          return @ReturnText
          end
          go

          — ———————-以下存儲過程是遍歷整個表,添加字段并修改校驗————————

          /*
          * 一下存儲過程是在原表的基礎上,添加字段保存校驗結果,需要替換掉表明和字段名
          */
          — 表名:a_idcard , 列 idcard 原身份證, card 標準(新添加),result校驗結果(新添加)

          — 添加標準身份證字段
          begin
          begin
          if not exists (select * from syscolumns where id=object_id(‘a_idcard’) and name=’card’)
          alter table a_idcard add [card] varchar(20);
          end
          — 添加校驗結果字段
          begin
          if not exists (select * from syscolumns where id=object_id(‘a_idcard’) and name=’result’)
          alter table a_idcard add [result] nvarchar(20);
          end
          end
          go

          –遍歷結果
          BEGIN
          declare @id_card varchar(100), @res varchar(200),@c_index int
          declare cur cursor

          for
          select idcard from a_idcard — 這里需要替換

          open cur
          fetch next from cur into @id_card
          while @@FETCH_STATUS = 0
          begin
          set @res = dbo.fun_utils_idnumberoprater(@id_card)
          set @c_index = charindex(‘_’,@res)
          print substring(@res,0,@c_index)
          print substring(@res, @c_index+1, len(@res))

          — 這里需要替換
          update a_idcard set card=substring(@res, @c_index+1, len(@res)),result=substring(@res,0,@c_index)
          where idcard=@id_card

          fetch next from cur into @id_card
          end
          close cur
          deallocate cur
          end
          go

          標簽MSSQL,SQLServer,技術文檔,數據庫,SQLSERVER

          相關下載

          查看所有評論+

          網友評論

          網友
          您的評論需要經過審核才能顯示

          熱門閱覽

          最新排行

          公眾號

          主站蜘蛛池模板: 日本精品高清一区二区| 在线视频一区二区三区| 国产在线无码一区二区三区视频| 精品免费国产一区二区| 久久99热狠狠色精品一区 | 午夜视频久久久久一区 | 老熟女五十路乱子交尾中出一区| 中文字幕一区二区三区5566| 一区二区三区视频免费| 精品三级AV无码一区| 岛国精品一区免费视频在线观看| 久久精品免费一区二区| 亚洲一区二区三区偷拍女厕 | 午夜福利无码一区二区| 久久国产精品一区免费下载| 鲁丝丝国产一区二区| 亚洲Av永久无码精品一区二区| 久久精品道一区二区三区| 国内国外日产一区二区| 国产凸凹视频一区二区| 色综合一区二区三区| 国产乱子伦一区二区三区| 免费看AV毛片一区二区三区| 波多野结衣中文字幕一区二区三区 | 一区二区三区伦理高清| 精品无码国产AV一区二区三区| 国产精品久久一区二区三区| 午夜在线视频一区二区三区| 国产日韩精品一区二区三区| 一区二区三区免费在线观看| 中文字幕精品一区| 亚洲宅男精品一区在线观看| 国模视频一区二区| 中文字幕日韩人妻不卡一区| 亚洲一区在线免费观看| 日本香蕉一区二区三区| 国产免费一区二区三区在线观看| 无码人妻久久一区二区三区 | 精品国产鲁一鲁一区二区 | 成人午夜视频精品一区| 无码视频一区二区三区|