001 /** 002 * This library is free software; you can redistribute it and/or modify it 003 * under the terms of the GNU Lesser General Public License (LGPL) as 004 * published by the Free Software Foundation; either version 3.0 of the 005 * License, or (at your option) any later version. 006 * 007 * This library is distributed in the hope that it will be useful, but 008 * WITHOUT ANY WARRANTY; without even the implied warranty of 009 * MERCHANTABILITY of FITNESS FOR A PARTICULAR PURPOSE. See the GNU 010 * Lesser General Public License for more details. 011 */ 012 013 /** 014 * Title: JBarcodeBean 015 * Description: Barcode JavaBeans Component 016 * Copyright: Copyright (C) 2004 017 * Company: Matthias Hanisch 018 */ 019 package net.sourceforge.jbarcodebean.model; 020 021 import net.sourceforge.jbarcodebean.BarcodeException; 022 023 024 public class Code11 extends AbstractBarcodeStrategy { 025 026 static final CharacterCode[] codes={ 027 new CharacterCode('0',new byte[]{1,1,1,1,2,1},0), 028 new CharacterCode('1',new byte[]{2,1,1,1,2,1},1), 029 new CharacterCode('2',new byte[]{1,2,1,1,2,1},2), 030 new CharacterCode('3',new byte[]{2,2,1,1,1,1},3), 031 new CharacterCode('4',new byte[]{1,1,2,1,2,1},4), 032 new CharacterCode('5',new byte[]{2,1,2,1,1,1},5), 033 new CharacterCode('6',new byte[]{1,2,2,1,1,1},6), 034 new CharacterCode('7',new byte[]{1,1,1,2,2,1},7), 035 new CharacterCode('8',new byte[]{2,1,1,2,1,1},8), 036 new CharacterCode('9',new byte[]{2,1,1,1,1,1},9), 037 new CharacterCode('-',new byte[]{1,1,2,1,1,1},10), 038 new CharacterCode('*',new byte[]{1,1,2,2,1,1},11), 039 new CharacterCode('$',new byte[]{0,1},12)}; 040 041 protected String augmentWithChecksum(String text) throws BarcodeException { 042 int checksumC=0; 043 int checksumK=0; 044 int weightC=1; 045 int weightK=1; 046 for(int i=text.length()-1;i>=0;i--){ 047 CharacterCode cc = getCharacterCode(text.charAt(i)); 048 checksumC+=cc.check*weightC; 049 weightC++; 050 if(weightC>10){ 051 weightC=1; 052 } 053 } 054 checksumC=checksumC%11; 055 CharacterCode codeC=getCharacterCode(checksumC); 056 text+=codeC.character; 057 for(int i=text.length()-1;i>=0;i--){ 058 CharacterCode cc = getCharacterCode(text.charAt(i)); 059 checksumK+=cc.check*weightK; 060 weightK++; 061 if(weightK>9){ 062 weightK=1; 063 } 064 } 065 checksumK=checksumK%11; 066 CharacterCode codeK=getCharacterCode(checksumK); 067 if(text.length()>=10){ 068 text+=codeK.character; 069 } 070 return text; 071 } 072 073 protected String getBarcodeLabelText(String text) { 074 return text; 075 } 076 077 protected CharacterCode[] getCodes() { 078 return codes; 079 } 080 081 protected byte getMarginWidth() { 082 return 0; 083 } 084 085 protected char getStartSentinel() { 086 return '*'; 087 } 088 089 protected char getStopSentinel() { 090 return '*'; 091 } 092 093 protected boolean isInterleaved() { 094 return false; 095 } 096 097 protected String postprocess(String text) { 098 return text; 099 } 100 101 protected String preprocess(String text) throws BarcodeException { 102 return text; 103 } 104 105 public int requiresChecksum() { 106 return OPTIONAL_CHECKSUM; 107 } 108 109 }