Ho trovato un algoritmo in php del Code128 e l'ho convertito e riadattato per il C#, ma una cosa proprio non mi torna.

Il Code128 consiste nel creare tramite una sua logica una stringa di numeri che vanno da 1 a 4 dalla stringa di caratteri e simboli che gli passo.

Quello che non mi torna è la logica di cosa farsene poi di questi numeri.

Le guide dicono:
"I numeri sono la larghezza delle barre nere e bianche"

Non è del tutto esatto.

Secondo l'algoritmo ad ogni barra nera leva un pixel a prescindere dal moltiplicatore.

Es. ho questo frammento di stringa: 12432

Si parte nero.
Imposto il moltiplicatore a 2 (1 sta a 2, 2 a 4, e così via).

Secondo le guide dovrei avere un barcode di questo genere (faccio un stringa di N per nero e B per bianco).
codice:
NNBBBBNNNNNNNNBBBBBBNNNN
Se ipoteticamente creo un barcode secondo questa logica e lo do in pasto a un programma, es. Bytescout che legge le immagini con barcode, mi bestemmia in 7 lingue e s'impalla, neanche dice è sbagliato, muore proprio.

Se invece seguendo la logica dell'algoritmo levo un pixel al Nero e lo do al bianco verrebbe così.
codice:
NBBBBBNNNNNNNBBBBBBBNNN
Questo barcode viene correttamente letto.

Però la logica è strana, prendiamo la stringa 113, con il moltiplicatore 2 verrebbe:
codice:
NBBBNNNNN
Con moltiplicatore 3 (correttamente letto)
codice:
NNBBBBNNNNNNNN
Con moltiplicatore 4 (correttamente letto)
codice:
NNNBBBBBNNNNNNNNNNN
Il bello è che se invece lo si moltiplicasse per 1 verrebbe
codice:
BBNN
Praticamente tutte le barre Nere di lunghezza 1 si perderebbero secondo questa logica e il barcode risulterebbe illeggibile.

Quindi, dove trovo la logica di stampa del Code128 per iscritto e spiegata bene?