PB
1 //CODE128条码基础知识 2 //CODE128有三个版本 3 //CODE128A: 标准数字和字母, 控制符, 特殊字符 4 //CODE128B: 标准数字和字母, 小写字母, 特殊字符 5 //CODE128C: [00]-[99]的数字对集合, 共100个 6 //本函数采用CODE128B版本 7 //条码由开始位、数据位、校验位、停止位组成 8 //计算过程: 9 //1.取各字符ASC码乘以字符序号之和(以ASC=32为分界点,大于32减32,小于32加64)10 //2.计算校验码11 //3.组合条码:开始位+数据位+校验位+停止位12 int li_asc_total = 10413 int li_asc_tmp,i14 char lc_start=char(204)//采用CODE128B版本15 char lc_stop=char(206)16 int li_check_digit17 string ls_check_digit18 19 //1.取各字符ASC码乘以字符序号之和(以ASC=32为分界点,大于32减32,小于32加64)20 For i = 1 To len(as_sourcetext)21 li_asc_tmp = Asc(mid(as_sourcetext,i, 1))22 If li_asc_tmp >= 32 Then23 li_asc_total = li_asc_total + (li_asc_tmp - 32) * i24 Else25 li_asc_total = li_asc_total + (li_asc_tmp + 64) * i26 End If27 Next28 //2.计算校验码29 li_check_digit = mod(li_asc_total,103)30 If li_check_digit >= 95 Then//特殊字符31 li_check_digit = li_check_digit + 10032 Else33 li_check_digit = li_check_digit + 3234 end if35 ls_check_digit = char(li_check_digit)36 //3.组合条码:开始位+数据位+校验位+停止位37 Return lc_start + as_sourcetext + ls_check_digit + lc_stop
SQL
1 create FUNCTION [dbo].[UDF_GetStr2Code128]( 2 @Str NVARCHAR(200))--128B码:ChrW(204) 3 RETURNS NVARCHAR(200) 4 AS 5 BEGIN 6 DECLARE @checkB INT 7 DECLARE @i INT ,@j INT 8 DECLARE @str2 NVARCHAR(2) 9 SET @i=110 11 SET @checkB = 1 --开始位的码值为104 mod 103 =112 --13 WHILE @i <= LEN(@Str) 14 BEGIN15 SET @str2 = SUBSTRING(@Str,@i,1)16 SET @j = ASCII(SUBSTRING(@Str,@i,1))--ASCII(@str2) --不过滤无效字符,比如汉字17 IF @j<135 18 BEGIN19 SET @j=@j-3220 END21 ELSE IF @j >=135 22 BEGIN23 SET @j=@j-10024 END25 SET @checkB = @checkB + @i * @j26 SET @i=@i+127 END 28 29 30 SET @checkB = @checkB % 103 --计算校验位31 IF @checkB<95 AND @checkB>0 --有的资料直接求103的模,解说不充分,因为有的校验位超过127时,系统会"吃"掉它们(连带休止符).32 BEGIN33 SET @checkB = @checkB + 3234 END35 ELSE IF @checkB > 94 -- '字体设置时,字模被定义了2个值.观察字体文件时能发现.36 BEGIN37 SET @checkB = @checkB + 10038 END39 40 RETURN NCHAR(204) + @Str + CASE WHEN @checkB>0 THEN NCHAR(@checkB) ELSE NCHAR(32) END + NCHAR(206)41 42 END