|
This code easy to use allows the coding of 43 characters : 10 digits, 26 capital letters, the symbols $ % + -. / and the space. The extend mode makes it possible to code the 128 ASCII characters ; in this mode characters added compared to the "simple" mode are coded with 2 characters.
Character |
Value |
Pattern |
Character |
Value |
Pattern |
Character |
Value |
Pattern |
0 |
0 |
101000111011101 |
F |
15 |
101110111000101 |
U |
30 |
111000101010111 |
1 |
1 |
111010001010111 |
G |
16 |
101010001110111 |
V |
31 |
100011101010111 |
2 |
2 |
101110001010111 |
H |
17 |
111010100011101 |
W |
32 |
111000111010101 |
3 |
3 |
111011100010101 |
I |
18 |
101110100011101 |
X |
33 |
100010111010111 |
4 |
4 |
101000111010111 |
J |
19 |
101011100011101 |
Y |
34 |
111000101110101 |
5 |
5 |
111010001110101 |
K |
20 |
111010101000111 |
Z |
35 |
100011101110101 |
6 |
6 |
101110001110101 |
L |
21 |
101110101000111 |
- |
36 |
100010101110111 |
7 |
7 |
101000101110111 |
M |
22 |
111011101010001 |
. |
37 |
111000101011101 |
8 |
8 |
111010001011101 |
N |
23 |
101011101000111 |
Espace |
38 |
100011101011101 |
9 |
9 |
101110001011101 |
O |
24 |
111010111010001 |
$ |
39 |
100010001000101 |
A |
10 |
111010100010111 |
P |
25 |
101110111010001 |
/ |
40 |
100010001010001 |
B |
11 |
101110100010111 |
Q |
26 |
101010111000111 |
+ |
41 |
100010100010001 |
C |
12 |
111011101000101 |
R |
27 |
111010101110001 |
% |
42 |
101000100010001 |
D |
13 |
101011100010111 |
S |
28 |
101110101110001 |
|
|
|
E |
14 |
111010111000101 |
T |
29 |
101011101110001 |
* |
|
100010111011101 |
Exemple of checksum for : ZB65732
35 + 11 + 6 +5 +7 +3 +2 = 69
69
/ 43 = 1, remainder 26 which corresponds to the letter Q
New code with
the checksum
: ZB65732Q
The charaters not forming part of the simple mode are coded with one of the 4 prefix % $ / + followed by a basic character according to the following table. To literally use the charaters which are used as prefix or the symbol * it will be necessary to use a coding on 2 characters.
Character to be produced |
Sequence to be used |
|
Character to be produced |
Sequence to be used |
|
Character to be produced |
Sequence to be used |
---|---|---|---|---|---|---|---|
NUL |
%U |
|
+ |
/K |
|
V |
V |
SOH |
$A |
|
, |
/L |
|
W |
W |
STX |
$B |
|
- |
- |
|
X |
X |
ETX |
$C |
|
. |
. |
|
Y |
Y |
EOT |
$D |
|
/ |
/O |
|
Z |
Z |
ENQ |
$E |
|
0 |
0 |
|
[ |
%K |
ACK |
$F |
|
1 |
1 |
|
\ |
%L |
BEL |
$G |
|
2 |
2 |
|
] |
%M |
BS |
$H |
|
3 |
3 |
|
^ |
%N |
HT |
$I |
|
4 |
4 |
|
_ |
%O |
LF |
$J |
|
5 |
5 |
|
` |
%W |
VT |
$K |
|
6 |
6 |
|
a |
+A |
FF |
$L |
|
7 |
7 |
|
b |
+B |
CR |
$M |
|
8 |
8 |
|
c |
+C |
SO |
$N |
|
9 |
9 |
|
d |
+D |
SI |
$O |
|
: |
/Z |
|
e |
+E |
DLE |
$P |
|
; |
%F |
|
f |
+F |
DC1 |
$Q |
|
< |
%G |
|
g |
+G |
DC2 |
$R |
|
= |
%H |
|
h |
+H |
DC3 |
$S |
|
> |
%I |
|
i |
+I |
DC4 |
$T |
|
? |
%J |
|
j |
+J |
NAK |
$U |
|
@ |
%V |
|
k |
+K |
SYN |
$V |
|
A |
A |
|
l |
+L |
ETB |
$W |
|
B |
B |
|
m |
+M |
CAN |
$X |
|
C |
C |
|
n |
+N |
EM |
$Y |
|
D |
D |
|
o |
+O |
SUB |
$Z |
|
E |
E |
|
p |
+P |
ESC |
%A |
|
F |
F |
|
q |
+Q |
FS |
%B |
|
G |
G |
|
r |
+R |
GS |
%C |
|
H |
H |
|
s |
+S |
RS |
%D |
|
I |
I |
|
t |
+T |
US |
%E |
|
J |
J |
|
u |
+U |
SPACE |
SPACE |
|
K |
K |
|
v |
+V |
! |
/A |
|
L |
L |
|
w |
+W |
" |
/B |
|
M |
M |
|
x |
+X |
# |
/C |
|
N |
N |
|
y |
+Y |
$ |
/D |
|
O |
O |
|
z |
+Z |
% |
/E |
|
P |
P |
|
{ |
%P |
& |
/F |
|
Q |
Q |
|
| |
%Q |
' |
/G |
|
R |
R |
|
} |
%R |
( |
/H |
|
S |
S |
|
~ |
%S |
) |
/I |
|
T |
T |
|
DEL |
%T |
* |
/J |
|
U |
U |
|
|
|
Since we can create the bar code pattern it remains us to draw it on the screen and to print it on a paper sheet. Two approaches are possible :
All the found 3 of 9 barcodes on the net (Incomplete demonstration font) aren't free, several times expensive, and with uncertain quality; the width module isn't always permanent in the font definition. I've decided consequently to draw entirely a 3 of 9 font and to propose it for download. I test it on a laser printer with size 11, what gives a small barcode with a width of about 1,6 mm/car, result : reading at 100% ! On a good inkjet printer, we must go up to the size 15 what give a character width of 2,1mm.
This font contain the 43 basic charactersand the delimitor under the symbol *. Each character ends with a fin white bar of separation.
Copy this file |
A 3 of 9 barcode will be build up in the following way :
|
Here is a small program
|
The Code39$ function can be re-used in any other program written with Visual BASIC 6; it can also be copied just as it is in a VBA macro linked to an Excel or Word document.
Public Function Code39$(chaine$) 'V 1.0.0 'Parametres : une chaine 'Parameters : a string 'Retour : * une chaine qui, affichee avec la police CODE39.TTF, donne le code barre ' * une chaine vide si parametre fourni incorrect 'Return : * a string which give the bar code when it is dispayed with CODE39.TTF font ' * an empty string if the supplied parameter is no good Dim i% Code39$ = "" If Len(chaine$) > 0 Then 'Verifier si caracteres valides 'Check for valid characters For i% = 1 To Len(chaine$) Select Case Asc(Mid$(chaine$, i%, 1)) Case 32, 36, 37, 43, 45 To 57, 65 To 90 Case Else i% = 0 Exit For End Select Next If i% > 0 Then Code39$ = "*" & chaine$ & "*" End If End If End Function |
Since the first publication of this page, I'd received numbered versions in different languages :
Language |
Author |
|
Visual Foxpro |
Emile MAITREJEAN |
|
Delphi |
Jean-Camille POPULUS |
Do you like this
page ? Click here ! |