я делал такой "финт ушами" для BC 128 в 3.0, едиственный минус - растет длина штрихкода :
X++:
static str IsolateSymbols(str _inputStr)
{
str Code128SymbCard ="_!#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz[\]^`{|}~\"\'";
str charBC, charBC_prev, charBC_next;
int len, i;
str encodedStr;
;
//Формирование строки штрихкода
len = strlen(_inputStr);
for(i=1; i<=len;i++)
{
charBC_prev = i==1 ? "" : substr(_inputStr,i-1,1);
charBC = substr(_inputStr,i,1);
charBC_next = substr(_inputStr,i+1,1);
//изоляция руских букв, пробелов, etc
if(strfind(charBC,Code128SymbCard,1,1)<=0) // не нашли символ в таблице символов CODE128
{
charBC = int2str(char2num(charBC,1));
if(strlen(charBC)<3)
charBC = "0"+ charBC; //ascii для пробела, etc
//проверка пред. и след. символа
//есть некорректный пред. символ
if(charBC_prev!="" && strfind(charBC_prev,Code128SymbCard,1,1)<=0)
encodedStr += charBC;
else encodedStr += "{"+ charBC;
//есть некорректный след. символ
if(charBC_next!="" && strfind(charBC_next,Code128SymbCard,1,1)<=0)
encodedStr += "";
else encodedStr += "}";
}
else
encodedStr += charBC;
}
return encodedStr;
}