CODE128码在PB中的实现

   在信息系统开发时通常有用户要求能够打印条码,如CODE128码,使用专门的条码打印程序固然可能,但难以与你的信息系统接轨,虽然也有支持数据源为数据的条码打印程序。通常有几种方法实现条码的打印:一、直接向打印机发送控制命令,二、使用条码字体,三、印刷。各有优劣,使用条码字体的方法无疑是最简单、经济的做法,如果对条码识别精确度不高(比如使用下面我提供的方法由最大分辨率为200dpi的条码打印机打印出来的条码在条码检测仪上被评为F级即最低级),建议试试条码字体的方法。

以下代码可实现在PB中将源字符串转为可打印的CODE128码字符串。为了能正确显示条码并能打印,你必须先安装CODE128码字体并将显示为CODE128码的对象的字体设置为CODE128码。例如,在PB数据窗口对象中创建一个表达式类似“f_getcode128(要显示成CODE128码的栏位)”的计算列,字体设置为CODE128码。

F_getcode128实现的是CODE128B版本,你可以根据CODE128的编码原理实现A版本和C版本。要注意的是,由于CODE128码字符串包含不可正常显示的字符,你必须使用支持Unicode码的PB版本,如PB10以上。

附CODE128码在PB中的实现源代码。

 

/*******************************************************************

函数名称:f_getcode128()

参数:     as_sourcetext string 源字符串

返回值:  string 转成code128码后可打印的字符串

功能描述:取code128码字符串

创建人:  康剑民

创建日期:2008-12-10

版本号:  V1.0

备注:要在PB中正常打印code128码字符串,必须使用PB10以上(支持Unicode码)

*******************************************************************/

//CODE128条码基础知识

//CODE128有三个版本

//CODE128A: 标准数字和字母, 控制符, 特殊字符

//CODE128B: 标准数字和字母, 小写字母, 特殊字符

//CODE128C: [00]-[99]的数字对集合, 共100个

//本函数采用CODE128B版本

//条码由开始位、数据位、校验位、停止位组成

//计算过程:

//1.取各字符ASC码乘以字符序号之和(以ASC=32为分界点,大于32减32,小于32加64)

//2.计算校验码

//3.组合条码:开始位+数据位+校验位+停止位

int li_asc_total = 104

int li_asc_tmp,i

char lc_start=char(204)//采用CODE128B版本

char lc_stop=char(206)

int li_check_digit

string ls_check_digit

 

//1.取各字符ASC码乘以字符序号之和(以ASC=32为分界点,大于32减32,小于32加64)

For i = 1 To len(as_sourcetext)

        li_asc_tmp = Asc(mid(as_sourcetext,i, 1))

        If li_asc_tmp >= 32 Then

                li_asc_total = li_asc_total + (li_asc_tmp - 32) * i

        Else

                li_asc_total = li_asc_total + (li_asc_tmp + 64) * i

        End If

Next

//2.计算校验码

li_check_digit = mod(li_asc_total,103)

If li_check_digit >= 95 Then//特殊字符

       li_check_digit = li_check_digit + 100

Else

        li_check_digit = li_check_digit + 32

end if

ls_check_digit = char(li_check_digit)

//3.组合条码:开始位+数据位+校验位+停止位

Return lc_start + as_sourcetext + ls_check_digit  + lc_stop

 

 

你可能感兴趣的:(PowerBuilder)