条形码校验码生成

//判断25码的校验位是否正确
//
/*
交叉25码校验位的计算规则。
交叉25码的校验位计算方法是 Mod 10 :

1、字符个数为偶数时为:10的倍数-[奇数位的数字之和(从左至右)+(偶数位数字之和)*3个位数]
2、字符个数为奇数时为:10的倍数-[偶数位的数字之和(从左至右)+(奇数位数字之和)*3个位数]
如:

514362的校验位为10*X-[(5+4+6)+3*(1+3+2)]=7(因加校验位后个数为奇数,故前面加0后为05143627。

76534的校验位为10*X-[(6+3)+3*(7+5+4)]=3
*/

//string ls_checkcode
//ls_checkcode = right(astr_code,1)

string ls_basecode
//ls_basecode = left(astr_code,len(astr_code) - 1)
ls_basecode = astr_code

//奇数,偶数位和
int oddsum,evensum,i
oddsum = 0
evensum = 0
for i =1 to len(ls_basecode)
if mod(i,2) = 1 then
oddsum = oddsum + integer(mid(ls_basecode,i,1))
else
evensum = evensum + integer(mid(ls_basecode,i,1))
end if
next
//根据位数选择判断方法
//1、字符个数为偶数时为:10的倍数-[奇数位的数字之和(从左至右)+(偶数位数字之和)*3个位数]
//2、字符个数为奇数时为:10的倍数-[偶数位的数字之和(从左至右)+(奇数位数字之和)*3个位数]
int isum
if mod(len(ls_basecode),2) = 1 then
//个数为奇数
isum = evensum + oddsum * 3
else
//个数为偶数
isum = evensum * 3 + oddsum
end if
//校验位 = isum个数位与10取补
int icheck
icheck = 10 - mod(isum,10)
//10的补为0
if icheck = 10 then
icheck = 0
end if
/*
if ls_checkcode = string(icheck) then
return true
else
return false
end if
*/
return string(icheck)

原文地址:https://www.cnblogs.com/kuailewangzi1212/p/3143759.html