身份证升位和中英文转化

原创 2007年09月25日 15:29:00
declare @i as int
declare @j as int
declare @S as int
declare @NewPersonID As char(20)
declare @PersonID as char(50)    
 
         
SET @PersonID='210103530204152'
        
--去掉空格:
        set  @PersonID = rtrim(ltrim(@PersonID))

        
--如果不是数字,就返回原来的字符 :
        If IsNumeric(@PersonID= 0 or len(@PersonID<> 15  
    
begin
            
select @PersonID
        
End  

        
set @NewPersonID = SUBSTRING(@PersonID16+ '19' + SUBSTRING(@PersonID7,9)
        
set @S = 0
        
set @i=1
    
    
--Dim w() As Integer = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1}

    
while @i<=17
        
begin
    
if      @i - 1=0
        
SET @j = Cast(SUBSTRING(@NewPersonID,@i1AS int* 7
    
else if @i - 1=1
        
SET @j = Cast(SUBSTRING(@NewPersonID@i1AS int* 9
    
else if @i - 1=2
        
SET @j = Cast(SUBSTRING(@NewPersonID@i1AS int* 10
    
else if @i - 1=3
        
SET @j = Cast(SUBSTRING(@NewPersonID@i1AS int* 5
    
else if @i - 1=4
        
SET @j = Cast(SUBSTRING(@NewPersonID@i1AS int* 8
    
else if @i - 1=5
        
SET @j = Cast(SUBSTRING(@NewPersonID@i1AS int* 4
    
else if @i - 1=6
        
SET @j = Cast(SUBSTRING(@NewPersonID@i1AS int* 2
    
else if @i - 1=7
        
SET @j = Cast(SUBSTRING(@NewPersonID@i1AS int* 1
    
else if @i - 1=8
        
SET @j = Cast(SUBSTRING(@NewPersonID@i1AS int* 6
    
else if @i - 1=9
        
SET @j = Cast(SUBSTRING(@NewPersonID@i1AS int* 3
    
else if @i - 1=10
        
SET @j = Cast(SUBSTRING(@NewPersonID@i1AS int* 7
    
else if @i - 1=11
        
SET @j = Cast(SUBSTRING(@NewPersonID@i1AS int* 9
    
else if @i - 1=12
        
SET @j = Cast(SUBSTRING(@NewPersonID@i1AS int* 10
    
else if @i - 1=13
        
SET @j = Cast(SUBSTRING(@NewPersonID@i1AS int* 5
    
else if @i - 1=14
        
SET @j = Cast(SUBSTRING(@NewPersonID@i1AS int* 8
    
else if @i - 1=15
        
SET @j = Cast(SUBSTRING(@NewPersonID@i1AS int* 4
    
else if @i - 1=16
        
SET @j = Cast(SUBSTRING(@NewPersonID@i1AS int* 2
    
else if @i - 1=17
         
SET @j = Cast(SUBSTRING(@NewPersonID@i1AS int* 1
     
set  @S = @S + @j
     
set  @i= @i+1
     
end      
 
--        Dim a() As String = {"1", " 0", "x", "9", "8", "7", "6", "5", "4", "3", "2"}
    set  @S = @S % 11
if     @S=0
     
select  ltrim(rtrim(cast(@NewPersonID as char(20)))) +  '1'
else if @S=1
     
select  ltrim(rtrim(cast(@NewPersonID as char(20)))) +  '0'
else if @S=2
     
select  ltrim(rtrim(cast(@NewPersonID as char(20)))) +  'x'
else if @S=3
     
select  ltrim(rtrim(cast(@NewPersonID as char(20)))) +  '9'
else if @S=4
     
select  ltrim(rtrim(cast(@NewPersonID as char(20)))) +  '8'
else if @S=5
     
select  ltrim(rtrim(cast(@NewPersonID as char(20)))) +  '7'
else if @S=6
     
select  ltrim(rtrim(cast(@NewPersonID as char(20)))) +  '6'
else if @S=7
     
select  ltrim(rtrim(cast(@NewPersonID as char(20)))) +  '5'
else if @S=8
     
select  ltrim(rtrim(cast(@NewPersonID as  char(20)))) + '4'
else if @S=9
     
select  ltrim(rtrim(cast(@NewPersonID as char(20)))) +  '3'
else if @S=10
     
select  ltrim(rtrim(cast(@NewPersonID as char(20)))) +  '2'
 

‘————————————————————————————————————————————————
-
 
'函数:
 CREATE FUNCTION [dbo].[PersonID15To18] (@PersonID char(50))  
RETURNS char(20) AS  

BEGIN 
declare @i as int
declare @j as int
declare @S as int
declare @NewPersonID As char(20)
  
       --  SET @PersonID=
'210103530204152'
        --去掉空格:
        set  @PersonID = rtrim(ltrim(@PersonID))

        --如果不是数字,就返回原来的字符 :
        If IsNumeric(@PersonID) = 0 or len(@PersonID) <> 15  
    begin
            return @PersonID
        End  

        set @NewPersonID = SUBSTRING(@PersonID, 1, 6) + 
'19' + SUBSTRING(@PersonID, 7,9)
        set @S = 0
        set @i=1
    
    --Dim w() As Integer = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1}

    while @i<=17
        begin
    if      @i - 1=0
        SET @j = Cast(SUBSTRING(@NewPersonID,@i, 1) AS int) * 7
    else if @i - 1=1
        SET @j = Cast(SUBSTRING(@NewPersonID, @i, 1) AS int) * 9
    else if @i - 1=2
        SET @j = Cast(SUBSTRING(@NewPersonID, @i, 1) AS int) * 10
    else if @i - 1=3
        SET @j = Cast(SUBSTRING(@NewPersonID, @i, 1) AS int) * 5
    else if @i - 1=4
        SET @j = Cast(SUBSTRING(@NewPersonID, @i, 1) AS int) * 8
    else if @i - 1=5
        SET @j = Cast(SUBSTRING(@NewPersonID, @i, 1) AS int) * 4
    else if @i - 1=6
        SET @j = Cast(SUBSTRING(@NewPersonID, @i, 1) AS int) * 2
    else if @i - 1=7
        SET @j = Cast(SUBSTRING(@NewPersonID, @i, 1) AS int) * 1
    else if @i - 1=8
        SET @j = Cast(SUBSTRING(@NewPersonID, @i, 1) AS int) * 6
    else if @i - 1=9
        SET @j = Cast(SUBSTRING(@NewPersonID, @i, 1) AS int) * 3
    else if @i - 1=10
        SET @j = Cast(SUBSTRING(@NewPersonID, @i, 1) AS int) * 7
    else if @i - 1=11
        SET @j = Cast(SUBSTRING(@NewPersonID, @i, 1) AS int) * 9
    else if @i - 1=12
        SET @j = Cast(SUBSTRING(@NewPersonID, @i, 1) AS int) * 10
    else if @i - 1=13
        SET @j = Cast(SUBSTRING(@NewPersonID, @i, 1) AS int) * 5
    else if @i - 1=14
        SET @j = Cast(SUBSTRING(@NewPersonID, @i, 1) AS int) * 8
    else if @i - 1=15
        SET @j = Cast(SUBSTRING(@NewPersonID, @i, 1) AS int) * 4
    else if @i - 1=16
        SET @j = Cast(SUBSTRING(@NewPersonID, @i, 1) AS int) * 2
    else if @i - 1=17
         SET @j = Cast(SUBSTRING(@NewPersonID, @i, 1) AS int) * 1
     set  @S = @S + @j
     set  @i= @i+1
     end      
 --        Dim a() As String = {"1", " 0", "x", "9", "8", "7", "6", "5", "4", "3", "2"}
    set  @S = @S % 11
if     @S=0
     set @NewPersonID=  ltrim(rtrim(cast(@NewPersonID as char(20)))) +  
'1'
else if @S=1
      set @NewPersonID=   ltrim(rtrim(cast(@NewPersonID as char(20)))) +  
'0'
else if @S=2
      set @NewPersonID=   ltrim(rtrim(cast(@NewPersonID as char(20)))) +  
'x'
else if @S=3
      set @NewPersonID=    ltrim(rtrim(cast(@NewPersonID as char(20)))) +  
'9'
else if @S=4
      set @NewPersonID=   ltrim(rtrim(cast(@NewPersonID as char(20)))) +  
'8'
else if @S=5
      set @NewPersonID=   ltrim(rtrim(cast(@NewPersonID as char(20)))) +  
'7'
else if @S=6
      set @NewPersonID=   ltrim(rtrim(cast(@NewPersonID as char(20)))) +  
'6'
else if @S=7
      set @NewPersonID=   ltrim(rtrim(cast(@NewPersonID as char(20)))) +  
'5'
else if @S=8
      set @NewPersonID=   ltrim(rtrim(cast(@NewPersonID as  char(20)))) + 
'4'
else if @S=9
      set @NewPersonID=   ltrim(rtrim(cast(@NewPersonID as char(20)))) +  
'3'
else if @S=10
      set @NewPersonID=   ltrim(rtrim(cast(@NewPersonID as char(20)))) +  
'2'
     return   @NewPersonID
END

//-------------
--进行汉英转换的存储过程
--进行汉英转换的存储过程
CREATE procedure cechange as 
SET NOCOUNT ON

delete fielddiscription
INSERT INTO fielddiscription (tablename,tableid,columnname)SELECT sysobjects.name as tablename,sysobjects.id as id,
    syscolumns.name as columnname FROM
             syscolumns inner join sysobjects on syscolumns.id=sysobjects.id
                     where sysobjects.xtype=
'U'
                                    order by tablename
DECLARE @tablename varchar(128), @columnname varchar(128), @discription varchar(50)
DECLARE authors_cursor CURSOR FOR SELECT tablename,columnname,discription FROM fielddiscription ORDER BY tablename

OPEN authors_cursor
FETCH NEXT FROM authors_cursor  INTO @tablename, @columnname, @discription
WHILE @@FETCH_STATUS = 0
BEGIN
    declare @value1 varchar(50),@i int 
    select @i=count(value) from ::fn_listExtendedProperty(null,
'user','dbo','table',@tablename,'column',null) where objname=@columnname
    if @i<>0
        select @value1=cast(value as varchar) from ::fn_listExtendedProperty(null,
'user','dbo','table',@tablename,'column',null) where 

objname=@columnname
    else
        set @value1=
' '
    update fielddiscription set discription=@value1 where tablename=@tablename and columnname=@columnname
    FETCH NEXT FROM authors_cursor INTO @tablename, @columnname, @discription
END
CLOSE authors_cursor
 
DEALLOCATE authors_cursor
insert fielddiscription (columnname,discription)values(
'select','选择')
insert fielddiscription (columnname,discription)values(
'cnt','数目')
insert fielddiscription (columnname,discription)values(
'IsRequiredHan','/选修')
GO



 

MYSQL 身份证升位算法

公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。         地址码表示编码对象常住户...
  • lmxmimihuhu
  • lmxmimihuhu
  • 2015年08月10日 13:22
  • 242

身份证升位(字符串)(深大oj题)(初学者解答)

**题目描述:** 第一代身份证十五位数升为第二代身份证十八位数的一般规则是:第一步,在原十五位数身份证的第六位数后面插入19 ;第二步,按照国家规定的统一公式计算出第十八位数,作为校验码放在第二代身...
  • qq_40618238
  • qq_40618238
  • 2017年12月03日 22:54
  • 49

身份证号码验证算法

转载地址:http://www.cnblogs.com/xudong-bupt/p/3293838.html 做项目的时候需要对拿到的数据进行“清洗”,比如剔除一些不可能存在的身...
  • wanglha
  • wanglha
  • 2016年07月04日 09:36
  • 437

jquery 验证表单 有身份证号的验证

$(function(){ $(':input').blur(function(){ var text = $(this).val(); if(""==text){ $(this).paren...
  • Zoe_Wang_ing
  • Zoe_Wang_ing
  • 2013年06月07日 09:50
  • 2174

身份证验证、字符串删除、扩展字母、空格转化、位运算

1     这个身份证验证比较简单,没有区号的,仅仅判断18位的身份证和年月日正确与否,但是里面用到的思想很好呀,我自己做好的时候就是傻傻的用if,else无限判断我感觉自己都烦,驰哥说只要把对应的润...
  • lotluck
  • lotluck
  • 2015年11月13日 12:39
  • 430

18位身份证号码的编排规则

身份证号码的编排规则:   (1)前1、2位数字表示:所在省份的代码; (2)第3、4位数字表示:所在城市的代码; (3)第5、6位数字表示:所在区县的代码; (4)第7~14位数字表示:出生年...
  • t_332741160
  • t_332741160
  • 2014年08月12日 14:06
  • 5252

Word中批量进行中英文标点的转换

打开word,"工具"→"宏"→"Visual Basic 编辑器",在主窗体复制以下内容后粘贴,保存.关闭编辑器,在"工具"→"宏"→"宏"里调用. Sub ToggleInterpunction...
  • bat67
  • bat67
  • 2017年05月25日 15:58
  • 485

身份证号码的规则及验证原理

 身份证号码的规则及验证原理   【身份证号码的规则】 1、15位身份证号码组成: ddddddyymmddxxs共15位,其中: dddddd为6位的地方代码,根据这6位可...
  • cd_liuglobal
  • cd_liuglobal
  • 2015年05月09日 21:11
  • 960

Oracle常用函数:IDCARD15TO18() 身份证15位转18位函数

Create Or Replace Function IDCARD15TO18(CARD Varchar2) Return Varchar2 Is     Type TIARRAY Is Table...
  • mikean
  • mikean
  • 2013年12月29日 13:11
  • 3234

平方根升余弦滤波器

1.Rcosfir:design a raised cosine FIR filter.(rcosfir是低通滤波用的,以便后面加载频。)       B = RCOSFIR(R, N_T...
  • yundanfengqing_nuc
  • yundanfengqing_nuc
  • 2015年11月03日 15:49
  • 1430
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:身份证升位和中英文转化
举报原因:
原因补充:

(最多只允许输入30个字)