SqlServer 函數(shù)搞定票據(jù)校驗位

眾所周知,18位的身份證號碼,最后一位是校驗位,可能是0到9和X中的一個。它的校驗規(guī)則可參考。http://www.coozhi.com/youxishuma/hulianwang/23169.html

其實,很多票據(jù)號也是采用了相同的校驗位算法。這些票據(jù)號可能是10位,12位等等。它們的區(qū)別僅僅是參與計算校驗位的數(shù)字少些而已,過程是一樣的。

因此,對生成身份證校驗位的算法稍加改造,即可支持使用此類算法的票據(jù)號校驗位計算。

以下為在 Sql Server 中的自定義函數(shù),可以用來直接為流水的票據(jù)號計算變幻莫測的最后一位。

create function [dbo].[f_nums_check_code](@nums varchar(17)) returns varchar(1)
as
begin
    declare @ms nvarchar(17)
    declare @i int
    declare @sum int

    if(LEN(@nums)>17) return null;
    set @ms = RIGHT('79058421637905842', LEN(@nums))
    set @i = 1
    set @sum = 0
    while @i<=len(@nums)
    begin
       set @sum = @sum + cast(substring(@nums, @i, 1) as int) * (cast(substring(@ms, @i, 1) as int)
                       + (case substring(@ms, @i, 1) when '0' then 10 else 0 end))
       set @i = @i + 1
    end
    return substring('10X98765432', @sum%11+1, 1)
end

調(diào)用舉例:

select bill_no,
    bill_no + dbo.[f_nums_check_code](bill_no)  as bill_code
 from bill_info

bill_code 妥妥的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容