得到条形码的校验位函数

一、校验码说明:


校验码的计算方法


1.        代码位置序号
代码位置序号是指包括校验码在内的,由右至左的顺序号(校验码的代码位置序号为1)。

2.        计算步骤
校验码的计算步骤如下:
a.从代码位置序号2开始,所有偶数位的数字代码求和。
b.将步骤a的和乘以3。
c.从代码位置序号3开始,所有奇数位的数字代码求和。
d.将步骤b与步骤c的结果相加。
e.用大于或等于步骤d所得结果且为10最小整数倍的数减去步骤d所得结果,其差即为所求校验码的值。
示例:代码690123456789X1校验码的计算见表B.1。


步 骤


举 例 说 明


1.自右向左顺序编号


位置序号


13


12


11


10


9


8


7


6


5


4


3


2


1


代码


6


9


0


1


2


3


4


5


6


7


8


9


X


2.从序号2开始求出偶数位上数字之和①


9+7+5+3+1+9=34 ①


3. ①*3=②


34×3=102  ②


4.从序号3开始求出奇数位上数字之和③


8+6+4+2+0+6=26 ③


5. ②+③=④


102+26=128 ④


6.用大于或等于结果④且为10最小整数倍的数减去④,其差即为所求校验码的值


130-128=2
校验码X1=2

校验码的计算方法

二、SQL实现:

Go

-- =============================================

-- Author:        <Maco Wang>

-- Create date: <2009-10-27 16:01>

-- Description:   <计算条形码的校验码>

-- =============================================

create function [dbo].[Get_CheckCode]

(

@ActiveCode varchar(12)

)

returns varchar(13)

as

begin

declare @codelength int

set @codelength= len(@ActiveCode)

declare @curnum int;set @curnum=0

declare @temp1 int;set @temp1=0

declare @temp2 int;set @temp2=0

declare @locatnum int;set @locatnum=0

declare @code13 int

declare @i int;set @i=0

while(@i<@codelength)

begin

set @[email protected]+2;

set @curnum=floor(substring(@ActiveCode,@[email protected],1))

if(@locatnum%2=0)

set @[email protected][email protected]

else

set @[email protected][email protected]

set @[email protected]+1

end

set @code13=10-(@temp1*[email protected])%10;

if(@code13=10)

set @code13=0

return @ActiveCode+cast(@code13 as varchar(1));

end

--测试示例

select dbo.[Get_CheckCode](‘827123121212‘)

--运行结果

/*

8271231212124

*/

时间: 2024-10-04 10:57:22

得到条形码的校验位函数的相关文章

Microsoft SQL Server 自定义函数整理大全(下)

34.字符串转成16进制函数 /**************************** 字符串转成16进制 作者:不得闲 QQ: 75492895 Email: [email protected] ****************************/ --创建函数(suiyunonghen(不得闲)) Create Function VarCharToHex(@Str Varchar(400)) returns varchar(800) as begin declare @i int,@

SQL常用自定义函数

去除字符串中连续的分割符 --创建函数 create function [dbo].[m_delrepeatsplit] ( @str varchar(2000), @split nvarchar(200) ) returns nvarchar(2000) as begin --begin declare declare @count int,@i int,@isnull int declare @newchar nvarchar(200),@nn nvarchar(300) set @coun

.NET 中Barcode Library的应用二

.NET中Barcode Library的应用二 介绍 在上一篇中我已经简单介绍了这个函数库(条形码应用之一------------函数库的简介).在这一篇中我将使用这个库提供更多的操作,希望对大家有用. 让我们来看下下面的设定: 我们有许多要处理的条形码.它们的类型被存储在Excel文件的一列中(如上图BarcodeType),它们的数据包含在另一列(BarcodeData)中.我们要做的是根据它们的类型和数据生成相应的条码并将他们存储在第三列(BarcodeImage)中.在物流交易或者超市

(转)基于SQL的EAN-13条形码校验位生成

源:http://bbs.csdn.net/topics/220057226 create function dbo.EAN_13(@value varchar(13)) returns varchar(13)asbegin declare @s1 int ,@s2 int declare @t table (id int identity(1,1),b bit) insert into @t(b) select top 13 1 from syscolumns set @value='0'+r

一维条形码生成与识别技术

核心提示:1引言 条形码(简称条码)技术是集条码理论.光电技术.计算机技术.通信技术.条码印制技术于一体的一种自动识别技术,条形码是由宽度不同.反射率不同的条(黑色)和空(白色),一维条形码生成与识别技术,按照一定的编码规则编制而成,用以表达一组数字或字母符号信息的图形标识符,参考文献1.熊小寒.条形码技术与标准化[M].天津: 1引言 条形码(简称条码)技术是集条码理论.光电技术.计算机技术.通信技术.条码印制技术于一体的一种自动识别技术.条形码是由宽度不同.反射率不同的条(黑色)和空(白色)

具有自动地计算校验和和格式化条形码的能力的条形码控件MSI Plessey

MSI Plessey条形码控件是在20世纪70年代由英国Plessey Company所设计的,主要使用在图书馆和零售应用中.MSI Code字符集的符号集是由数字0-9表示的条形码符号,开始符和结束符组成.在MSI字体中,使用圆括号来表示开始和结束字符.若不用IDAutomation字体工具将MSI字体作为一个条形码打印的话可能会比较困难,因为要求校验和数字计算.如果要首选一种简单易用的条形码字体并且不要求MSI Code,那么请考虑IDAutomation的Codabar Font,它不需

多种格式多种字体版本的条形码控件USPS Postnet &amp; Intelligent Mail Barcode Font Package

IDAutomation的USPS Postnet & Intelligent Mail Barcode Font Package在六个不同的格式中包含了若干不同的字体版本.其中包括字体工具,宏和源代码,以帮助将字体集成到应用程序中 具体功能: 提供的字体工具- 提供的这些字体工具可用于协助应用程序的集成.这些字体工具可以为条形码字体自动地格式化开始,结束及校验字符.所含的可用字体工具如下: .NET 框架程序集DLL (100%托管代码) C++ 头文件 C# .NET类库 Visual Ba

Html5添加Canvas的EAN13条形码生成插件教程

一.使用方法 如果你需要将该EAN13条形码插件作为jQuery插件来使用,那么需要在页面中引入jQuery和jquery-ean13.min.js文件. <script type="text/javascript" src="js/jquery.min.js"></script> <script type="text/javascript" src="dist/jquery-ean13.min.js&qu

【工业串口和网络软件通讯平台(SuperIO)教程】九.重写通讯接口函数,实现特殊通讯方式

SuperIO相关资料下载:http://pan.baidu.com/s/1pJ7lZWf 1.1    统一的IO接口 开发一套设备驱动同时具备串口和网络通讯能力,通讯接口在逻辑上是统一的,在此基础上串口和网络也有自己的IO通讯特点,根据不同的通讯方式,可以把IIOChannel实例转换成ISessionSocket或ISessionCom实例.如下图: 1.2     通讯要求 一个请求命令分两次发送,每次发送数据时的串口校验位不同.先发送地址信息,这时串口的配置为Baud,m,8,1:再发