Code 128


 2 045 680 téléchargements (340 hier)   Domaine public / GPL / OFL

25 commentaires

Tom Evans  02/03/2008
I like the idea of the barcode fonts, they print ok, but the barcode reader cannot decipher them, Am I doing something wrong?
nibblesmx  25/06/2008
Grand Zebu, you rock!!!

You just saved my life man. If there's a way to donate some money, please let me know.

Thanks a lot dude
rjskoko  19/09/2009
The Code 128 symbology has particular start and stop characters and a check sum. Look on Wikipedia or Google for Code 128 to find the "rules".
rjskoko  19/09/2009
Additional: Try this site to generate a graphic of a valid symbol (supports a large number of symbologies) if you only need a single symbol (or to generate a symbol to verify yours against):
http://www.idautomation.com/java/linearservlet.html
pushkar1210  29/12/2014
Hi nibblesmx,
I want to print bar code - Code128 font with the following data.
123 ABC
the data contains space in between and code 128 does not support. can anybody help me?

Thanks.
Pushkar
nonlinearly  18/03/2015
Hi. I used these fonts but barcode are not identified by the barcode reader. As "rjskoko" said must include the start and stop characters. In wikipedia say that start character in code 128 C is the ascii code 210 but how can I type it? Also as I see there isn't barcode for this ascii in the fonts!
nonlinearly  18/03/2015
They do not work. The stop character Î (ASCII 206) is not the same as it appears to this web page!!!
karnaugh  02/10/2015
I have confirmed that this barcode DOES work. You must use the correct start and stop characters, and remember the checksum character right before the stop. Go to this page for an automatic string generator so you don't have to manually calculate them: http://www.jtbarton.com/Barcodes/BarcodeStringBuilderExample.aspx
david aguilar  02/06/2016
I've implemented this font to print voucher codes, I choose Code 128 B but when the result of the checksum is a character for example 127, it prints a white square. This is part of the code that I wrote. This code works for me, most of times.

Private Sub onPrint(ByVal sender As Object, ByVal ev As PrintPageEventArgs)
Dim printFont As New Font("code 128", 40)
Dim stringToBarCode As String = "251250000156"
Dim intChar As Integer
Dim stringBuild As New StringBuilder
Dim checksum As Integer = 104
Dim i As Integer = 1
Dim crcResult As Integer
stringBuild.Append(ChrW(204))
For Each c As Char In stringToBarCode.ToCharArray
intChar = Encoding.ASCII.GetBytes(c)(0)
If intChar >= 32 And intChar <= 126 Then
checksum += (intChar - 32) * i
i += 1
stringBuild.Append(c)
End If
Next
If checksum > 104 Then
crcResult = (checksum Mod 103) + 32
stringBuild.Append(ChrW(crcResult))
stringBuild.Append(ChrW(206))
ev.Graphics.DrawString(stringBuild.ToString, printFont, Brushes.Black, 1, 1)
End If
End Sub

How can it be solved?, Do I need to edit the font? if so, how can i do it?
Holger Will  19/09/2016
this has no characters for start, and stop codes.

Start A is ascii 208, start B is ascii 209 and start c ascii 210. The stop code is allways 211. All these characters are not available with this font...
abbass  04/02/2017
nice
a.f.ortega  26/06/2017
Help me please, i printed card with id but don´t put start, stop codes or digi controller, and then the reader can´t read my codebar, exist a solution ?
a.f.ortega  26/06/2017
Help me please, i printed card with id but don´t put start, stop codes or digi controller, and then the reader can´t read my codebar, exist a solution ?
InklingTrainer  20/08/2018
I used this encoder. The other link didn't work for me.
https://www.bcgen.com/fontencoder/
CirasaEric  13/11/2018
Thanks to David Aguilar and the info on Wikipedia I fixed the code to use this font. (Below the c# code)

public string Code128(string toEncode)
{
StringBuilder Encoded = new StringBuilder();

//Start code
Encoded.Append((char)204);
int sum = 104;
for (int i = 0; i < toEncode.Length; i++)
{
sum += ((char)toEncode[i] - 32) * (i+1);
Encoded.Append(toEncode[i]);
}

sum = sum % 103;
sum += 32;

//Checksum between 94 and 103 are encoded in the 200 - 206 range
if (sum > 94 && sum < 103)
sum += 105;

//Checksum
Encoded.Append((char)sum);
//Stop code
Encoded.Append((char)206);

return Encoded.ToString();
}

The Difference with the code of David is that if the checksum values is in the 95-102 we have the correct font on ASCII (200-207). I made several test and it works.
lordparadraculo  15/07/2019
Hello, CirasaEric. Thanks for the code. Could you please give us instructions on how to use this code. When I try to use putting it in a macro it give me a sintax error.
Your help will be really appreciated.
Aki7  12/10/2022
CirasaEric's code worked for lots of passwords, but some weren't working for me. Looking at the code, range 94-103 have letters in it that work. I see 127 up to 194 to be skipped, with an offset of 68.

//Checksum between 127 and 194 result in bad chars. Barcode chars begin in this font again at 196.
if (sum > 126 && sum < 195)
sum += 68;
Aki7  12/10/2022
Lots of text inputs, not passwords.
DBrackenWork  18/05/2023
I translated CirasaEric's code into VBA and added Aki7 extra.
I don't actually know what they are talking about in those 2 cases and didn't run into any problems testing it out but I only used it on simple combinations of letters and numbers.

Function Code128(Code As String) As String
'Application.Volatile

Code128 = Chr(204) & Code

Dim encoded As Long
encoded = 104
Dim length As Long

Dim i As Long
i = 0

Do While i < Len(Code)
encoded = encoded + (Asc(Mid(Code, i + 1, 1)) - 32) * (i + 1)
i = i + 1
Loop

encoded = encoded Mod 103
encoded = encoded + 32

If encoded > 94 And encoded < 103 Then encoded = encoded + 105

If encoded > 127 And encoded < 194 Then encoded = encoded + 68

Code128 = Code128 & Chr(encoded) & Chr(206)

End Function
DBrackenWork  23/05/2023
Small edits.
I have removed "If encoded > 94 And encoded < 103 Then encoded = encoded + 105" this line and changed the next line to

If encoded => 127 And encoded <= 194 Then encoded = encoded + 68
pmendl  22/12/2023
Translated DBrackenWork code to T-SQL. Tested and works for 128A characters.

Originally there were 104 instead of 103 constant and 204 instead of 203, however CHAR(204) is for no understandable reason copy-pastable correctly. Maybe due to language/collation setting of our server. So I falled back to Start A...

Enjoy the code:
ALTER FUNCTION [dbo].[Code128_encode]
(
-- Add the parameters for the function here
@TextToEncode varchar(max)
)
RETURNS varchar(max)
AS
BEGIN
-- Declare variables
DECLARE @i int = LEN(@TextToEncode) -- Pointer over characters to encode

DECLARE @Check int = 103 -- Sum for modulo computation; assumes Start Code A used
-- adding 32 makes it character ASCII number of check digit

-- Cycle over all payload characters; runs from end backwards to compute LEN(@TextToEncode) only once
-- assumes Start Code was added (* 1 multiplier) in @Check declaration
WHILE (@i > 0)
BEGIN
SET @Check = @Check + ((ASCII(SUBSTRING(@TextToEncode, @i, 1 ))-32) * @i)
SET @i = @i-1
END

-- Compute modulo and make ASCII code from value
SET @Check = (@Check % 103) + 32
IF (@Check >= 127) -- Check can never be greater than 102+32=134
SET @Check = @Check + 68

-- Return the resulting barcode: Start Code A + text + checkdigit + Stop pattern (Stop + Final bar)
RETURN CHAR(203) + @TextToEncode + CHAR(@Check) + CHAR(206) -- In ideal world this should work...

END
DBrackenWork  15/02/2024
Bonus update - Here it is in modern Excel with no VBA needed. Target text in A1.

=CHAR(204)&A1&CHAR(LET(ENCODED,MOD(104+SUM((CODE(MID(A1,SEQUENCE(,LEN(A1),,1),1))-32)*SEQUENCE(,LEN(A1),,1)),103)+32,ENCODED+IF(AND(ENCODED>=127,ENCODED<=194),68,0)))&CHAR(206)
jpxr  23/07/2024
stumpled uppon this great work from zebu.

Can someone help me with the STOP character?
CHAR(206) like in DBrackenWork's formula delivers the french OE for me:
https://www.pic-upload.de/view-37389527/Bildschirmfoto2024-07-23um15.06.04.png.html

My formula looks like this (german)

=ZEICHEN(204)&A1&ZEICHEN(LET(ENCODED;REST(104+SUMME((CODE(TEIL(A1;SEQUENZ(;LÄNGE(A1);;1);1))-32)*SEQUENZ(;LÄNGE(A1);;1));103)+32;ENCODED+WENN(UND(ENCODED>=127;ENCODED<=194);68;0)))&ZEICHEN(206)

The issue seems the CHAR(206)/ZEICHEN(206).

Thank you
jpxr
jpxr  23/07/2024
tried with version #2 from zebu's website (https://grandzebu.net/informatique/codbar-en/code128.htm#Version)
START and STOP signs are just blank squares. thus, no luck either with V2
jpxr  23/07/2024
Found a solution:
download the latest version: https://grandzebu.net/informatique/codbar-en/code128.htm#Version
Start Ñ 132
Stop Ó 238
german Excel formula:
=ZEICHEN(132)&A2&ZEICHEN(LET(ENCODED;REST(104+SUMME((CODE(TEIL(A2;SEQUENZ(;LÄNGE(A2);;1);1))-32)*SEQUENZ(;LÄNGE(A2);;1));103)+32;ENCODED+WENN(UND(ENCODED>=127;ENCODED<=194);68;0)))&ZEICHEN(238)


Connexion pour ajouter un commentaire.


Données personnelles  -  Contact
Liens :  On snot and fonts