Bookland e Musicland

All’interno della codifica EAN, come abbiamo visto, le prime cifre identificano il paese di appartenenza del codice. Ciononostante sono previsti dei gruppi di prefissi speciali che identificano delle categorie indipendenti dalla nazione:

977 – International Standard Serial Number for Periodicals (ISSN)
978 – International Standard Book Numbering (ISBN)
979 – International Standard Music Number (ISMN)

Per questo motivo sono stati coniati, umoristicamente, i nomi di due nazioni fittizie: la terra dei libri (Bookland) e la terra della musica (Musicland), per identificare queste famiglie di codici all’interno della codifica EAN.

La storia del codice ISBN è particolarmente complessa in quanto parte con uno standard basato su un codice a 9 cifre creato dal professore emerito di statistica al Trinity College di Dublino, Gordon Foster nel 1965. Il codice da lui ideato fu chiamato Standard Book Numbering (SBN).
Il codice SBN fu in seguito inglobato nel ISBN a 10 cifre e la conversione poteva essere fatta semplicemente aggiungendo uno zero alla sinistra del vecchio codice.
Il codice ISBN-10 risulta quindi composto da 2 cifre che identificano il “gruppo” linguistico di appartenenza, 4 cifre che identificano l’editore, 3 cifre che identificano il titolo e una check digit.
La check digit è calcolata differentemente rispetto a quanto visto per EAN. Si esegue la somma dei prodotti di ciascuna cifra per la propria posizione (numerando da destra verso sinistra) e il valore del check digit sarà lo scarto rispetto al modulo 11 del risultato ottenuto.
Siccome il modulo 11 può assumere valori da 0 a 10, si può trovare una check digit uguale a “X” nel caso in cui il suo valore risulti proprio 10.

Nel 2007, per far fronte all’imminente esaurimento di codici disponibili, il codice ISBN è stato inglobato nel EAN-13 ed è stata creata la regione “bookland”. E’ nato quindi il codice ISBN-13 avente 13 cifre. Le prime cifre sono 978 oppure da 979-1 a 979-9 e l’ultima cifra di controllo è calcolata secondo lo standard EAN anzichè l’originale metodo ISBN.

Analogamente è stato creato lo standard ISMN per catalogare le pubblicazioni in ambito musicale. Questi codici sono caratterizzati dal prefisso 979-0.

Per quanto riguarda i periodici, esiste il codice ISSN che presenta il prefisso 977.

add-on-smallAl prefisso fa seguito il codice vero e proprio composto da un numero che identifica l’editore e uno che identifica il titolo della testata. Poi ci sono due cifre dedicate alla variante che può avere il titolo della rivista nella sua evoluzione (per esempio una variazione di prezzo, di titolo o di tipo di supporto) e la check digit.
Dopo il codice EAN-13 così composto, si aggiunge un altro codice a barre secondario, detto codice add-on, per identificare il numero d’uscita della rivista. Qui a sinistra vediamo un esempio di codice EAN-13 per un periodico con add-on a 5 cifre (il numero rappresentato ovviamente non è realistico).
Anche l’ISSN ha avuto un’evoluzione simile a quella dell’ISBN in quanto è composto da 8 cifre assegnate da un organismo internazionale, e originariamente il calcolo della chek digit era analogo a quello dell’ISBN (somma dei prodotti delle cifre per la loro posizione e modulo 11), ma oggi può essere inglobato nel codice EAN come mostrato nell’esempio.
issn_code_barreUn codice ISSN rappresentato come EAN è quindi composto dal prefisso 977 più le 7 cifre del codice ISSN propriamente detto, più 2 cifre riservate all’editore che può usarle per identificare delle variazioni nell’edizione e infine l’ultima cifra è la check digit calcolata col modulo 10 secondo lo standard EAN. A destra è rappresentato un esempio in cui è evidenziato il codice ISSN con un add-on a 2 cifre per indicare il numero dell’uscita.

Codice 128

I codici di tipo UPC/EAN hanno larga diffusione nella vendita di articoli al dettaglio, ma per far fronte a esigenze specifiche ne sono nati nel corso degli anni molti altri tipi, utilizzati prevalentemente per tracciare la circolazione delle merci.
Fra i codici lineari più utilizzati a questo scopo, meritano menzione i codici cosiddetti 128 e 39.

Il codice 128 è stato adottato dal consorzio GS1 per fondare lo standard GS1-128. Esso deve il suo nome al fatto che è in grado di codificare tutti i caratteri alfanumerici della tabella ASCI-128. Questo lo rende adatto quindi a codificare informazioni di qualunque tipo, non solo numeriche. Esiste un’estensione dello standard per codificare l’intero set ASCII-255, rendendo il codice adatto a coprire la codifica LATIN-1 (ISO-8859-1), ma tale estensione non è stata recepita dalla GS1-128. La tabella completa dei codici “128” è visibile in questo

128pix1-250Nel codice 128 ogni carattere è costituito da 11 moduli raggruppati a formare 3 barre e 3 spazi. Ogni barra o spazio può quindi essere largo da 1 a 4 moduli.
Sono inoltre presenti due quite zones da 10 moduli, un carattere di start e un carattere di stop (che però è fatto da 13 moduli) e una cifra di controllo. La lunghezza della stringa di dati è arbitraria.
Per permettere la codifica del gran numero di caratteri, lo standard prevede dei caratteri funzionali speciali e delle tabelle di codifica differenti. Nell’implementazione GS1-128 sono previste 3 tabelle codici e conseguentemente 3 caratteri di shift per passare dall’una all’altra, indicati come FNC1-4. Esistono 3 caratteri di start differenti per ciascuna tabella codici e un carattere di stop. Prima del carattere di stop è presente la cifra di controllo.
E’ stato codificato anche un che permette di passare da una tabella all’altra minimizzando la lunghezza del codice risultante.
Per il calcolo della cifra di controllo si sommano i valori di ciascun carattere del codice moltiplicato per la sua posizione da sinistra a destra e se ne estrae il modulo 103.
Nell’immagine sotto vediamo un’applicazione del codice 128.

InSight-128

Codice 39

Il codice 39 è stato sviluppato nel 1974 da David Allais e Ray Stevensper e fa fronte all’esigenza di codificare anche dei caratteri alfabetici oltre le dieci cifre. Esso permette infatti di codificare 43 caratteri, cioè le lettere maiuscole, dalla A alla Z, le cifre da 0 a 9 e alcuni segni grafici (La tabella completa dei simboli è riportata in questo ).
A differenza del codice UPC/EAN visto precedentemente, il codice 39 è di tipo discreto, i caratteri sono composti da 9 elementi, 5 barre e 4 spazi, che possono avare solo due spessori, uno largo e uno stretto. In ogni carattere ci sono sempre 3 elementi di spessore largo e fra un carattere e l’altro è previsto uno spazio di spessore stretto.
All’inizio e alla fine del simbolo vi è un carattere speciale, che viene solitamente rappresentato con un “*“, avente funzione di delimitatore. L’asimmetria di questo carattere fornisce al lettore la direzione.
Il codice 39 è particolarmente robusto per quanto riguarda gli errori di lettura. Infatti un errore nella stampa di un simbolo non può trasformarlo in un altro simbolo valido.
E’ stata comunque definita una regola per il calcolo di una cifra di controllo. Facendo riferimento alla seguente tabella

Carattere
Valore
Carattere
Valore
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
G
H
I
J
K
L
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z

.
space
$
/
+
%
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

la cifra di controllo si calcola sommando i valori corrispondenti a ciascun carattere e estraendone il modulo 43.
Nell’immagine seguente vediamo un esempio di codice 39.

InSight-39

Tabella completa Codice 128

 

Valore Code A Code B Code C B1 S1 B2 S2 B3 S3
0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102
SP

!

"

#

$

%

&

'

(

)

*

+

,

-

.

/

0

1

2

3

4

5

6

7

8

9

:

;

°

=

>

?

@

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

[

\

]

^

_

NUL

SOH

STX

ETX

EOT

ENQ

ACK

BEL

BS

HT

LF

VT

FF

CR

SO

SI

DLE

DC1

DC2

DC3

DC4

NAK

SYN

ETB

CAN

EM

SUB

ESC

FS

GS

RS

US

FNC 3

FNC 2

SHIFT

Code C

Code B

FNC 4

FNC 1
SP

!

"

#

$

%

&

'

(

)

*

+

,

-

.

/

0

1

2

3

4

5

6

7

8

9

:

;

°

=

>

?

@

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

[

\

]

^

_

'

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

p

q

r

s

t

u

v

w

x

y

z

{

|

}

~

DEL

FNC 3

FNC 2

SHIFT

Code C

FNC 4

Code A

FNC 1
00

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

Code B

Code A

FNC 1
2

2

2

1

1

1

1

1

1

2

2

2

1

1

1

1

1

1

2

2

2

2

2

3

3

3

3

3

3

3

2

2

2

1

1

1

1

1

1

2

2

2

1

1

1

1

1

1

3

2

2

2

2

2

3

3

3

3

3

3

3

2

4

1

1

1

1

1

1

1

1

1

1

1

1

2

2

4

2

1

1

1

1

1

1

1

4

4

4

2

2

4

1

1

1

1

1

4

4

1

1

3

4
1

2

2

2

2

3

2

2

3

2

2

3

1

2

2

1

2

2

2

2

2

1

2

1

1

2

2

1

2

2

1

1

3

1

3

3

1

3

3

1

3

3

1

1

3

1

1

3

1

1

3

1

1

1

1

1

3

1

1

3

1

2

3

1

1

2

2

4

4

1

1

2

2

4

4

4

2

1

4

3

1

2

2

1

2

2

1

2

2

1

1

1

1

1

3

1

1

1

1

1

1

1

1
2

2

2

1

1

1

2

2

2

1

1

1

2

2

2

3

3

3

3

1

1

3

3

2

1

1

1

2

2

2

2

2

2

1

1

1

2

2

2

1

1

1

2

2

2

3

3

3

3

1

1

3

3

3

1

1

1

2

2

2

4

1

1

1

1

1

1

1

1

2

2

2

2

2

2

1

1

3

1

4

1

1

1

4

4

4

1

1

1

2

4

2

1

1

1

4

4

1

1

3

4

1

1
2

1

2

2

3

2

2

3

2

2

3

2

2

1

2

2

1

2

2

1

2

2

1

1

2

1

2

2

1

2

1

3

1

3

1

3

3

1

3

3

1

3

1

3

1

1

3

1

1

3

1

1

3

1

1

3

1

1

3

1

1

4

1

2

4

1

4

1

2

2

4

1

4

1

2

2

1

1

1

1

2

1

2

2

1

2

2

1

2

1

1

1

1

3

1

1

3

1

3

1

1

1

1
2

2

2

2

2

2

1

1

1

1

1

1

3

3

3

2

2

2

1

3

3

1

1

3

2

2

2

1

1

1

2

2

2

2

2

2

1

1

1

1

1

1

3

3

3

2

2

2

2

3

3

1

1

3

2

2

2

1

1

1

1

1

1

2

2

2

2

2

2

1

1

1

1

1

1

1

1

1

1

1

4

4

4

1

1

1

1

1

1

4

2

2

4

4

4

1

1

1

1

4

3

4

3
2

2

1

3

2

2

3

2

2

3

2

2

2

2

1

2

2

1

1

2

1

2

2

1

2

2

1

2

2

1

3

1

1

3

3

1

3

3

1

3

3

1

3

1

1

3

1

1

1

1

1

3

1

1

3

1

1

3

1

1

1

1

1

4

2

4

1

2

1

4

2

4

1

2

1

1

4

1

2

1

2

2

1

2

2

1

2

2

1

1

1

1

3

1

1

3

1

3

1

1

1

1

1
103
104
105
Start A

 
Start B
 
 
Start C
2
2
2
1
1
1
1
1
1
4
2
2
1
1
3
2
4
2

Valore
B1
S1
B2
S2
B3
S3
B4
Stop
2
3
3
1
1
1
2

Dove:

  • B1 - B4 = barra 1 - 4
  • S1 - S3 = spazio 1 - 3
  • 1 = elemento di spessore 1 modulo
  • 2 = elemento di spessore 2 moduli
  • 3 = elemento di spessore 3 moduli
  • 4 = elemento di spessore 4 moduli

 
 
 

La codifica 128 non è univoca, ma, in alcuni casi, gli stessi dati possono essere rappresentati utilizzando differenti tabelle e differenti combinazioni di caratteri di start.
Quello che segue è l'algoritmo che permette di decidere quale codifica utilizzare per minimizzare la lunghezza del codice

  1. - Determinazione del carattere di Start:
    • 1a - se i dati cominciano con 4 o piu' cifre, usare il carattere di Start C;
    • 1b - altrimenti se nei dati compare un carattere di controllo prima di qualsiasi carattere alfabetico minuscolo, usare il carattere si Start A;
    • 1c - altrimenti, usare il carattere di Start B.
  2. - Se e' verificata la condizione 1a con un numero dispari di cifre, inserire un carattere Code A o Code B prima dell'ultima cifra, seguendo le regole 1b e 1c per scegliere tra Code A e Code b.
  3. - Se si presentano 4 o piu' cifre numeriche mentre si e' in Code A o in Code B:
    • 3a - se le cifre sono in numero pari, inserire un carattere Code C prima della prima cifra;
    • 3b - vicersa, se le cifre sono in numero dispari, insrire in carattere Code C dopo la prima cifra.
  4. - Se si presenta un carattere di controllo mentre si e' Code B:
    • 4a - se tra il carattere di controllo in questione e il successivo c'e' un carattere alfabetico minuscolo, inserire un carattere di shift prima del carattere di controllo;
    • 4b - viceversa, inserire un carattere Code A prima del carattere di controllo.
  5. - Se compare un carattere alfabetico minuscolo mentre si e' in Code A:
    • 5a - se tra il carattere alfabetico minuscolo in questione ed il successivo c'e' un carattere di controllo, inserire un carattere di shift prima del carattere alfabetico minuscolo;
    • 5b - altrimenti, inserire un carattere Code B prima del carattere alfabetico minuscolo.
  6. - Se si ha un carattere non numerico mentre si e' in Code C, inserire un carattere Code A o Code B prima del carattere in questione, seguendo le regole 1b e 1c per scegliere tra Code A e Code B.

caratteri-code39