Строка штрих-кода в кодировке Code 128

1. ulvisultanov 09.01.20 03:24 Сейчас в теме
Функция Code_Char(A)
	
	S = "";
	i = 0;
	B = "";
	Если A = "211412" Тогда 
		S = "A";
	ИначеЕсли A = "211214" Тогда 
		S = "B";
	ИначеЕсли A = "211232" Тогда 
		S = "C";
	ИначеЕсли A = "2331112" Тогда 
		S = "@";
	Иначе 
		S = "";
		Для i = 0 По СтрДлина(A) / 2 - 1 Цикл
			B = Сред(A, 2 * i + 1, 2);
			Если      B = "11" Тогда
				S = S + "" + "0";
			ИначеЕсли B = "21" Тогда
				S = S + "" + "1";
			ИначеЕсли B = "31" Тогда
				S = S + "" + "2";
			ИначеЕсли B = "41" Тогда
				S = S + "" + "3";
			ИначеЕсли B = "12" Тогда
				S = S + "" + "4";
			ИначеЕсли B = "22" Тогда
				S = S + "" + "5";
			ИначеЕсли B = "32" Тогда
				S = S + "" + "6";
			ИначеЕсли B = "42" Тогда
				S = S + "" + "7";
			ИначеЕсли B = "13" Тогда
				S = S + "" + "8";
			ИначеЕсли B = "23" Тогда
				S = S + "" + "9";
			ИначеЕсли B = "33" Тогда
				S = S + "" + ":";
			ИначеЕсли B = "43" Тогда
				S = S + "" + ";";
			ИначеЕсли B = "14" Тогда
				S = S + "" + "<";
			ИначеЕсли B = "24" Тогда
				S = S + "" + "=";
			ИначеЕсли B = "34" Тогда
				S = S + "" + ">";
			ИначеЕсли B = "44" Тогда
				S = S + "" + "?";
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	
	Возврат S;
	
КонецФункции

Функция Code_128_ID(ID) Экспорт
	
	Если      ID = 0 Тогда S = "212222";
	ИначеЕсли ID = 1 Тогда S = "222122";
	ИначеЕсли ID = 2 Тогда S = "222221";
	ИначеЕсли ID = 3 Тогда S = "121223";
	ИначеЕсли ID = 4 Тогда S = "121322";
	ИначеЕсли ID = 5 Тогда S = "131222";
	ИначеЕсли ID = 6 Тогда S = "122213";
	ИначеЕсли ID = 7 Тогда S = "122312";
	ИначеЕсли ID = 8 Тогда S = "132212";
	ИначеЕсли ID = 9 Тогда S = "221213";
	ИначеЕсли ID = 10 Тогда S = "221312";
	ИначеЕсли ID = 11 Тогда S = "231212";
	ИначеЕсли ID = 12 Тогда S = "112232";
	ИначеЕсли ID = 13 Тогда S = "122132";
	ИначеЕсли ID = 14 Тогда S = "122231";
	ИначеЕсли ID = 15 Тогда S = "113222";
	ИначеЕсли ID = 16 Тогда S = "123122";
	ИначеЕсли ID = 17 Тогда S = "123221";
	ИначеЕсли ID = 18 Тогда S = "223211";
	ИначеЕсли ID = 19 Тогда S = "221132";
	ИначеЕсли ID = 20 Тогда S = "221231";
	ИначеЕсли ID = 21 Тогда S = "213212";
	ИначеЕсли ID = 22 Тогда S = "223112";
	ИначеЕсли ID = 23 Тогда S = "312131";
	ИначеЕсли ID = 24 Тогда S = "311222";
	ИначеЕсли ID = 25 Тогда S = "321122";
	ИначеЕсли ID = 26 Тогда S = "321221";
	ИначеЕсли ID = 27 Тогда S = "312212";
	ИначеЕсли ID = 28 Тогда S = "322112";
	ИначеЕсли ID = 29 Тогда S = "322211";
	ИначеЕсли ID = 30 Тогда S = "212123";
	ИначеЕсли ID = 31 Тогда S = "212321";
	ИначеЕсли ID = 32 Тогда S = "232121";
	ИначеЕсли ID = 33 Тогда S = "111323";
	ИначеЕсли ID = 34 Тогда S = "131123";
	ИначеЕсли ID = 35 Тогда S = "131321";
	ИначеЕсли ID = 36 Тогда S = "112313";
	ИначеЕсли ID = 37 Тогда S = "132113";
	ИначеЕсли ID = 38 Тогда S = "132311";
	ИначеЕсли ID = 39 Тогда S = "211313";
	ИначеЕсли ID = 40 Тогда S = "231113";
	ИначеЕсли ID = 41 Тогда S = "231311";
	ИначеЕсли ID = 42 Тогда S = "112133";
	ИначеЕсли ID = 43 Тогда S = "112331";
	ИначеЕсли ID = 44 Тогда S = "132131";
	ИначеЕсли ID = 45 Тогда S = "113123";
	ИначеЕсли ID = 46 Тогда S = "113321";
	ИначеЕсли ID = 47 Тогда S = "133121";
	ИначеЕсли ID = 48 Тогда S = "313121";
	ИначеЕсли ID = 49 Тогда S = "211331";
	ИначеЕсли ID = 50 Тогда S = "231131";
	ИначеЕсли ID = 51 Тогда S = "213113";
	ИначеЕсли ID = 52 Тогда S = "213311";
	ИначеЕсли ID = 53 Тогда S = "213131";
	ИначеЕсли ID = 54 Тогда S = "311123";
	ИначеЕсли ID = 55 Тогда S = "311321";
	ИначеЕсли ID = 56 Тогда S = "331121";
	ИначеЕсли ID = 57 Тогда S = "312113";
	ИначеЕсли ID = 58 Тогда S = "312311";
	ИначеЕсли ID = 59 Тогда S = "332111";
	ИначеЕсли ID = 60 Тогда S = "314111";
	ИначеЕсли ID = 61 Тогда S = "221411";
	ИначеЕсли ID = 62 Тогда S = "431111";
	ИначеЕсли ID = 63 Тогда S = "111224";
	ИначеЕсли ID = 64 Тогда S = "111422";
	ИначеЕсли ID = 65 Тогда S = "121124";
	ИначеЕсли ID = 66 Тогда S = "121421";
	ИначеЕсли ID = 67 Тогда S = "141122";
	ИначеЕсли ID = 68 Тогда S = "141221";
	ИначеЕсли ID = 69 Тогда S = "112214";
	ИначеЕсли ID = 70 Тогда S = "112412";
	ИначеЕсли ID = 71 Тогда S = "122114";
	ИначеЕсли ID = 72 Тогда S = "122411";
	ИначеЕсли ID = 73 Тогда S = "142112";
	ИначеЕсли ID = 74 Тогда S = "142211";
	ИначеЕсли ID = 75 Тогда S = "241211";
	ИначеЕсли ID = 76 Тогда S = "221114";
	ИначеЕсли ID = 77 Тогда S = "413111";
	ИначеЕсли ID = 78 Тогда S = "241112";
	ИначеЕсли ID = 79 Тогда S = "134111";
	ИначеЕсли ID = 80 Тогда S = "111242";
	ИначеЕсли ID = 81 Тогда S = "121142";
	ИначеЕсли ID = 82 Тогда S = "121241";
	ИначеЕсли ID = 83 Тогда S = "114212";
	ИначеЕсли ID = 84 Тогда S = "124112";
	ИначеЕсли ID = 85 Тогда S = "124211";
	ИначеЕсли ID = 86 Тогда S = "411212";
	ИначеЕсли ID = 87 Тогда S = "421112";
	ИначеЕсли ID = 88 Тогда S = "421211";
	ИначеЕсли ID = 89 Тогда S = "212141";
	ИначеЕсли ID = 90 Тогда S = "214121";
	ИначеЕсли ID = 91 Тогда S = "412121";
	ИначеЕсли ID = 92 Тогда S = "111143";
	ИначеЕсли ID = 93 Тогда S = "111341";
	ИначеЕсли ID = 94 Тогда S = "131141";
	ИначеЕсли ID = 95 Тогда S = "114113";
	ИначеЕсли ID = 96 Тогда S = "114311";
	ИначеЕсли ID = 97 Тогда S = "411113";
	ИначеЕсли ID = 98 Тогда S = "411311";
	ИначеЕсли ID = 99 Тогда S = "113141";
	ИначеЕсли ID = 100 Тогда S = "114131";
	ИначеЕсли ID = 101 Тогда S = "311141";
	ИначеЕсли ID = 102 Тогда S = "411131";
	ИначеЕсли ID = 103 Тогда S = "211412";
	ИначеЕсли ID = 104 Тогда S = "211214";
	ИначеЕсли ID = 105 Тогда S = "211232";
	ИначеЕсли ID = 106 Тогда S = "2331112";
	КонецЕсли;
	Возврат S;
КонецФункции

Функция Code_128(A)
    BCode = Новый Массив(1024); //(0 To 1023) As Integer
    BInd = 0; //As Integer
    CurMode = ""; // As String
    Ch = 0; // As Integer
    Ch2 = 0; //As Integer
    i = 1; //As Integer
    LenA = 0; //As Integer
    CCode = 0; //As Integer
    S = ""; //As String
    BarArray = Новый Массив;//As Variant
	
	//Собираем строку кодов
    LenA = СтрДлина(A);
    Пока i <= LenA Цикл    
        //Текущий символ в строке
        Ch = КодСимвола(Сред(A, i, 1),1);
        i = i + 1;
        //Разбираем только символы от 0 до 127
        If Ch <= 127 Then
            //Следующий символ
            Если  i <= LenA Тогда 
                Ch2 = КодСимвола(Сред(A, i, 1), 1);
            Иначе 
                Ch2 = 0;
            КонецЕсли;
            //Пара цифр - режим С
            Если (48 <= Ch) И (Ch <= 57) И (48 <= Ch2) И (Ch2 <= 57) Тогда 
                i = i + 1;
                Если BInd = 0 Тогда
                    //Начало с режима С
                    CurMode = "C";
                    BCode[BInd] = 105;
                    BInd = BInd + 1;
                ИначеЕсли CurMode <> "C" Тогда
                    //Переключиться на режим С
                    CurMode = "C";
                    BCode[BInd] = 99;
                    BInd = BInd + 1;
                КонецЕсли;
                //Добавить символ режима С
                BCode[BInd] = Число(Символ(Ch) + "" + Символ(Ch2));
                BInd = BInd + 1;
            Иначе 
                Если BInd = 0 Тогда
                    Если Ch < 32 Тогда
                        //Начало с режима A
                        CurMode = "A";
                        BCode[BInd] = 103;
                        BInd = BInd + 1;
                    Иначе 
                        //Начало с режима B
                        CurMode = "B";
                        BCode[BInd] = 104;
                        BInd = BInd + 1;
                    КонецЕсли;
                КонецЕсли;
                //Переключение по надобности в режим A
                Если (Ch < 32) И (CurMode <> "A") Тогда 
                    CurMode = "A";
                    BCode[BInd] = 101;
                    BInd = BInd + 1;
                //Переключение по надобности в режим B
                ИначеЕсли ((64 <= Ch) И (CurMode <> "B")) ИЛИ (CurMode = "C") Тогда 
                    CurMode = "B";
                    BCode[BInd] = 100;
                    BInd = BInd + 1;
                КонецЕсли;
                //Служебные символы
                Если (Ch < 32) Тогда 
                    BCode[BInd] = Ch + 64;
                    BInd = BInd + 1;
                //Все другие символы
                Иначе 
                    BCode[BInd] = Ch - 32;
                    BInd = BInd + 1;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
	КонецЦикла;
	
	//точный аналог DIV: Цел(А/Б)
	//точный аналог MOD: А%Б
	
	
    //Подсчитываем контрольную сумму
    CCode = BCode[0]%103;
    Для i = 1 По BInd - 1 Цикл 
        CCode = (CCode + BCode[i] * i)%103;
    КонецЦикла;
    BCode[BInd] = CCode;
    BInd = BInd + 1;
    //Завершающий символ
    BCode[BInd] = 106;
    BInd = BInd + 1;
    //Собираем строку символов шрифта
	//BarArray = Новый Массив("155", "515", "551", "449", "485", "845", "458", "494", "854", 
	//    "548", "584", "944", "056", "416", "452", "065", "425", "461", "560", "506", 
	//    "542", "164", "524", "212", "245", "605", "641", "254", "614", "650", "119", 
	//    "191", "911", "089", "809", "881", "098", "818", "890", "188", "908", "980", 
	//    "01:", "092", "812", "029", "0:1", "821", "221", "182", "902", "128", "1:0", 
	//    "122", "209", "281", ":01", "218", "290", ":10", "230", "5<0", ";00", "04=", 
	//    "0<5", "40=", "4<1", "<05", "<41", "05<", "0=4", "41<", "4=0", "<14", "<50", 
	//    "=40", "50<", "320", "=04", "830", "047", "407", "443", "074", "434", "470", 
	//    "344", "704", "740", "113", "131", "311", "00;", "083", "803", "038", "0;0", 
	//    "308", "380", "023", "032", "203", "302", "A", "B", "C", "@");
    S = "";
    Для i = 0 По BInd - 1 Цикл 
        S = S + "" + Code_Char(Code_128_ID(BCode[i]));
		//S = S + "" + BarArray[BCode[I]];
    КонецЦикла;
    Возврат S;
КонецФункции
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. tolyan_ekb 104 09.01.20 10:56 Сейчас в теме
(1) Что нужно сделать? Умилиться или найти ошибки?
4. ulvisultanov 20.01.20 17:30 Сейчас в теме
3. d.batovskiy 09.01.20 11:32 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот