European Article Number, EAN (европейский номер товара) — европейский стандарт штрихкода, предназначенный для кодирования идентификатора товара и производителя. Является надмножеством американского стандарта UPC. Формат кода EAN13 позволяет закодировать строку длиной 12 символов, 13-й является контрольным числом, рассчитываемым на основе первых 12 по определенной формуле.
Штрих-коды сейчас используются повсеместно, и если вы зарабатываете на жизнь программированием, то рано или поздно столкнетесь с необходимостью реализации поддержки штрих-кодов в своем приложении. Хотя имеются разные платные и бесплатные библиотеки для генерации EAN-13 в java, наличие подробного описания формата подвигло меня в свое время на создание собственного велосипеда, на реализацию которого, к слову, ушло всего около трех часов. Класс реализован на java, работает в J2ME и Android, в Java SE не проверял, но должен работать так же нормально.
Итак, EAN13CodeBuilder - класс для кодирования последовательности 12 чисел в строку текста в EAN-13, которую затем можно отобразить на экране с помощью специального шрифта. Используется класс очень просто -в конструктор передается исходная строка, затем метод getCode() возвращает строку в EAN-13. Исходный код класса выглядит так:
Штрих-коды сейчас используются повсеместно, и если вы зарабатываете на жизнь программированием, то рано или поздно столкнетесь с необходимостью реализации поддержки штрих-кодов в своем приложении. Хотя имеются разные платные и бесплатные библиотеки для генерации EAN-13 в java, наличие подробного описания формата подвигло меня в свое время на создание собственного велосипеда, на реализацию которого, к слову, ушло всего около трех часов. Класс реализован на java, работает в J2ME и Android, в Java SE не проверял, но должен работать так же нормально.
Рабочий проект и более расширенное описание можно найти в моей статье на www.codeproject.com
Итак, EAN13CodeBuilder - класс для кодирования последовательности 12 чисел в строку текста в EAN-13, которую затем можно отобразить на экране с помощью специального шрифта. Используется класс очень просто -в конструктор передается исходная строка, затем метод getCode() возвращает строку в EAN-13. Исходный код класса выглядит так:
public class EAN13CodeBuilder {
private String codeStringValue;
private String generatedCode;
public EAN13CodeBuilder(String codeString)
{
codeStringValue = codeString;
parse();
}
public String getCode()
{
return generatedCode;
}
//////////////////////////////////////////////////////////
private String getFullCode()
{
int chetVal = 0, nechetVal = 0;
String codeToParse = codeStringValue;
for( int index = 0;index<6;index++ )
{
chetVal += Integer.valueOf(codeToParse.substring(index*2+1,index*2+2)).intValue();
nechetVal += Integer.valueOf(codeToParse.substring(index*2,index*2+1)).intValue();
}
chetVal *= 3;
int controlNumber = 10 - (chetVal+nechetVal)%10;
if( controlNumber == 10 ) controlNumber = 0;
codeToParse += String.valueOf(controlNumber);
return codeToParse;
}
private String DigitToUpperCase( String digit)
{
String letters = "ABCDEFGHIJ";
int position = Integer.valueOf(digit).intValue();
String retVal = letters.substring(position,position+1);
return retVal;
}
private String DigitToLowerCase( String digit)
{
String letters = "abcdefghij";
int position = Integer.valueOf(digit).intValue();
String retVal = letters.substring(position,position+1);
return retVal;
}
private String createEAN13Code(String rawCode)
{
int firstFlag = Integer.valueOf(
rawCode.substring(0,1)
).intValue();
String leftString = rawCode.substring(1,7);
String rightString = rawCode.substring(7);
String rightCode = "";
String leftCode = "";
for( int i=0;i<6;i++)
{
rightCode += DigitToLowerCase( rightString.substring(i,i+1) );
}
if( firstFlag == 0 )
{
leftCode = "#!"+leftString.substring(0,1)
+leftString.substring(1,2)
+leftString.substring(2,3)
+leftString.substring(3,4)
+leftString.substring(4,5)
+leftString.substring(5);
}
if( firstFlag == 1 )
{
///System.out.println("leftString: "+leftString);
leftCode = "$!"+leftString.substring(0,1)
+leftString.substring(1,2)
+DigitToUpperCase(leftString.substring(2,3))
+leftString.substring(3,4)
+DigitToUpperCase(leftString.substring(4,5))
+DigitToUpperCase(leftString.substring(5));
}
if( firstFlag == 2 )
{
leftCode = "%!"+leftString.substring(0,1)
+leftString.substring(1,2)
+DigitToUpperCase(leftString.substring(2,3))
+DigitToUpperCase(leftString.substring(3,4))
+leftString.substring(4,5)
+DigitToUpperCase(leftString.substring(5));
}
if( firstFlag == 3 )
{
leftCode = "&!"+leftString.substring(0,1)
+leftString.substring(1,2)
+DigitToUpperCase(leftString.substring(2,3))
+DigitToUpperCase(leftString.substring(3,4))
+DigitToUpperCase(leftString.substring(4,5))
+leftString.substring(5);
}
if( firstFlag == 4 )
{
leftCode = "'!"+leftString.substring(0,1)
+DigitToUpperCase(leftString.substring(1,2))
+leftString.substring(2,3)
+leftString.substring(3,4)
+DigitToUpperCase(leftString.substring(4,5))
+DigitToUpperCase(leftString.substring(5));
}
if( firstFlag == 5 )
{
leftCode = "(!"+leftString.substring(0,1)
+DigitToUpperCase(leftString.substring(1,2))
+DigitToUpperCase(leftString.substring(2,3))
+leftString.substring(3,4)
+leftString.substring(4,5)
+DigitToUpperCase(leftString.substring(5));
}
if( firstFlag == 6 )
{
leftCode = ")!"+leftString.substring(0,1)
+DigitToUpperCase(leftString.substring(1,2))
+DigitToUpperCase(leftString.substring(2,3))
+DigitToUpperCase(leftString.substring(3,4))
+leftString.substring(4,5)
+leftString.substring(5);
}
if( firstFlag == 7 )
{
leftCode = "*!"+leftString.substring(0,1)
+DigitToUpperCase(leftString.substring(1,2))
+leftString.substring(2,3)
+DigitToUpperCase(leftString.substring(3,4))
+leftString.substring(4,5)
+DigitToUpperCase(leftString.substring(5));
}
if( firstFlag == 8 )
{
leftCode = "+!"+leftString.substring(0,1)
+DigitToUpperCase(leftString.substring(1,2))
+leftString.substring(2,3)
+DigitToUpperCase(leftString.substring(3,4))
+DigitToUpperCase(leftString.substring(4,5))
+leftString.substring(5);
}
if( firstFlag == 9 )
{
leftCode = ",!"+leftString.substring(0,1)
+DigitToUpperCase(leftString.substring(1,2))
+DigitToUpperCase(leftString.substring(2,3))
+leftString.substring(3,4)
+DigitToUpperCase(leftString.substring(4,5))
+leftString.substring(5);
}
String retVal = leftCode + "-" + rightCode + "!";
return retVal;
}
private void parse()
{
String fullString = getFullCode();
System.out.println( "Full code: " + fullString );
generatedCode = createEAN13Code(fullString);
System.out.println( "Generated code: " + generatedCode );
}
}
Чтобы сгенерировать строку штрих-кода и вывести ее на экран, в Android можно использовать следующий код:
TextView t = (TextView)findViewById(R.id.barcode);
/// установить шрифт штрих-кода
Typeface font = Typeface.createFromAsset(this.getAssets(), "fonts/EanP72Tt Normal.Ttf");
t.setTypeface(font);
EAN13CodeBuilder bb = new EAN13CodeBuilder("124958761310");
t.setText(bb.getCode());
Другие статьи:
- Android: Как работать с mp3-файлами
- Android: Загрузка файлов на сервер с использованием HttpURLConnection
- Android: Получение координат GPS и загрузка карты c openstreetmap.org
- Android: Получение данных через POST-запрос
- Работа с интернет-сервисом с мобильного телефона -3: Работа с JSON
- Работа с интернет-сервисом с мобильного телефона -2: Работа с XML
- Использование List в LWUIT - Введение
- Создание отчетов в Excel с помощью ExcelFormat Library
- Создание "вечного" процесса для Windows




Комментариев нет:
Отправить комментарий