第一步:条码计算部分
这个程序是39码的算法,如果你需要使用其他类型的条码,可参考FoxBarCode程序中的相关部分内容。我这里的校验码功能未使用。
**********************************************************
* 39码 Generate Code_39 *
* 39码可以表示0-9、A-Z、+-.$/%等字符,并以“*”开始和结束*
**********************************************************
* 进入参数: *
*cbValue C 条码值 *
*lbCheck L 是否含校验码 *
**********************************************************
* 返回参数: *
* 条码内部码(仅为一位字符0则表示条码值不符合要求) *
**********************************************************
PARAMETERS cbValue,lbCheck
LOCAL cbCode,nbLen,nbi,nbj,cbtext
cbValue=UPPER(cbValue) &&转换成大写字母
cbtext="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"
IF !CHRTRAN(cbValue,CHRTRAN(cbValue,cbtext,""),"")==cbValue
RETURN "E" &&查找条码值中有无除数字外的其他字符,如有则返回出错信息
ENDIF
IF lbCheck &&调用计算校验位过程
* cbValue=bccheck(cbValue)
ENDIF
nbLen=LEN(cbValue) &&计算条码值的位数(长度)
LOCAL ARRAY acode[43]
acode[1]="101SB0B010" && 0
acode[2]="B01S1010B0" && 1
acode[3]="10BS1010B0" && 2
acode[4]="B0BS101010" && 3
acode[5]="101SB010B0" && 4
acode[6]="B01SB01010" && 5
acode[7]="10BSB01010" && 6
acode[8]="101S10B0B0" && 7
acode[9]="B01S10B010" && 8
acode[10]="10BS10B010" && 9
acode[11]="B0101S10B0" && A
acode[12]="10B01S10B0" && B
acode[13]="B0B01S1010" && C
acode[14]="1010BS10B0" && D
acode[15]="B010BS1010" && E
acode[16]="10B0BS1010" && F
acode[17]="10101SB0B0" && G
acode[18]="B0101SB010" && H
acode[19]="10B01SB010" && I
acode[20]="1010BSB010" && J
acode[21]="B010101SB0" && K
acode[22]="10B0101SB0" && L
acode[23]="B0B0101S10" && M
acode[24]="1010B01SB0" && N
acode[25]="B010B01S10" && O
acode[26]="10B0B01S10" && P
acode[27]="101010BSB0" && Q
acode[28]="B01010BS10" && R
acode[29]="10B010BS10" && S
acode[30]="1010B0BS10" && T
acode[31]="BS101010B0" && U
acode[32]="1SB01010B0" && V
acode[33]="BSB0101010" && W
acode[34]="1S10B010B0" && X
acode[35]="BS10B01010" && Y
acode[36]="1SB0B01010" && Z
acode[37]="1S1010B0B0" && -
acode[38]="BS1010B010" && .
acode[39]="1SB010B010" && SPACE
acode[40]="1S1S1S1010" && $
acode[41]="1S1S101S10" && /
acode[42]="1S101S1S10" && +
acode[43]="101S1S1S10" && %
cbCode="1S10B0B010" && 开始符号*
FOR nbi = 1 TO nbLen &&逐步处理条码值
cbCode=cbCode+acode(AT(SUBSTR(cbValue,nbi,1),cbtext))
ENDFOR
*WAIT cbCode+"1S10B0B01" WINDOW
RETURN cbCode+"1S10B0B01" &&加*号代码后返回(末尾的0忽略)