Implementation
So, we have the EAN13CodeBuilder, which is a class for encoding sequences of 12 numbers into a string of text in the EAN-13 barcode, which can then be displayed on the screen using a special font, in which each character is replaced by a bar code.This font contain few special characters like $, +, !, and the sets of the 10 digits for the codes L,R and G, described above. An EAN13 barcode string must be build up in the following way: start delimiter ( depends on first digit ) - left 6 symbols - middle delimiter (-) - right 6 symbols - end delimiter (!)
| Digit | L - code | G - code | R -code | Start delimiter |
| 0 | 0 | A | a | #! |
| 1 | 1 | B | b | $! |
| 2 | 2 | C | c | %! |
| 3 | 3 | D | d | &! |
| 4 | 4 | E | e | '! |
| 5 | 5 | F | f | (! |
| 6 | 6 | G | g | )! |
| 7 | 7 | H | h | *! |
| 8 | 8 | I | i | +! |
| 9 | 9 | J | j | ,! |
We only need to generate proper string from digits and display it with this special font.The usage of this class is very simple. It delivers the original string into the constructor, after which the method getcode() brings the string back into the EAN-13. The class' source code looks like this:
/*
* (C) 2011 Slava Archibasov
* http://plaincodesource.blogspot.com
*
*/
public class EAN13CodeBuilder {
private String codeStringValue;
private String generatedCode;
public EAN13CodeBuilder(String codeString)
{
codeStringValue = codeString;
parse();
}
public String getCode()
{
return generatedCode;
}
////////////////////////////////////////////////////////////////
// this method generates EAN 13 control number ans returns full
// string to encode
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;
}
//////////////////////////////////////////////
// this method generates EAN 13 encoded string
// algorithm can be found at http://en.wikipedia.org/wiki/EAN-13
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 )
{
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 );
}
}
Using the Code
To generate a bar code line and bring it to the Android screen, you should generate barcode string itself and show it on the screen with one of barcode fonts. To set font to TextView widget in Android, place ttf file in /assets project folder, load Typeface , and set this Typeface to TextView.
You can use the following code, for example:
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.graphics.Typeface;
public class AndroidEAN13Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
// ToDo add your GUI initialization code here
this.setContentView(R.layout.main);
TextView t = (TextView)findViewById(R.id.barcode);
// set barcode font for TextView. ttf file must be placed is assets/fonts
Typeface font = Typeface.createFromAsset(this.getAssets(), "fonts/EanP72Tt Normal.Ttf");
t.setTypeface(font);
// generate barcode string
EAN13CodeBuilder bb = new EAN13CodeBuilder("124958761310");
t.setText(bb.getCode());
}
}
Thanks for reading!
Comments
There are no comments yet. Be the first to comment!