![]() |
#11 |
Участник
|
ещё вариант:
я делал такой "финт ушами" для 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; } |
|