Les codes à barres

c’est pas que de la barre !

gouz.dev

// Sylvain Gougouzian

Développeur Auvergnat Rhônalpin

Un peu d’histoire

Où trouve-t-on des chats marrants ?

Dans les livres car il y a des chats pitres !

- . . . - - - - . . - - - - - - . . - . - .
. . . . . - - . - . - . - - - . - . - . . . . .

Code

morse
morse
morse
morse

1952

Norman Joseph Woodland et Bernard Silver

Principe de lecture

https://www.framboise314.fr/lecture-de-code-barres-avec-le-raspberry-pi/

IBM

Archives

🇺🇸 1974 🇺🇸

🇬🇧 1979 🇬🇧

🇫🇷 1980 🇫🇷

Reportage INA

https://www.ina.fr/ina-eclaire-actu/1980-l-arrivee-du-code-barres-en-france

666

Quel est le comble pour un informaticien ?

C’est d’avoir peur d’une souris

Les Codes 1D

UPC

EAN13

EAN13 : Motifs

EAN13 : Contrôle supplémentaire

0[AAAAAA][CCCCCC]
1[AABABB]
2[AABBAB]
3[AABBBA]
4[ABAABB]
5[ABBAAB]
6[ABBBAA]
7[ABABAB]
8[ABABBA]
9[ABBABA]

EAN13 : Calcul de la clé

A = (3 * (somme des pairs) + somme des impairs)

B = A % 10

Si B == 0, clé = 0, sinon 10 - B

Des jeux vidéo ???

Code 128

Et pleins d’autres

Image rare d’un code-barres se rebellant
contre un QRCode en milieu naturel

Les Codes 2D

AZTEC

QR Code

QRCode : Fonctionnement

Hello world
Hello world
Hello world
Hello world

Finder Pattern

Hello world
Hello world

Separators Pattern

Hello world
Hello world

Timing Pattern

Hello world
Hello world

Format Pattern

Hello world
Hello world
Hello world
Hello world

Content

QRCode : Alignment Pattern

Error Level

Datamatrix

PDF 417

Et plein d’autres

Quelle est la différence entre Windows et un virus ?

Le virus il fonctionne !

😆 XD ?

3D réelle

3D couleur

Navilens

4D

Fridi

Idée

Encodage de l’information

Compression de la donnée avec un algo d’Abraham Lempel et Jacob Ziv.

Fridi est codé en JS, donc lz-string est utilisé.

=> donnée encodée sur un tableau de uint8 (0 => 255)

Rouge

Entrée :

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

Sortie:

[
    [ 0,  1,  2,  3],
    [ 4,  5,  6,  7],
    [ 8,  9, 10, 11],
    [12, 13, 14, 15],
]

Vert

Entrée :

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

Sortie:

[
    [15, 14, 13, 12],
    [11, 10,  9,  8],
    [ 7,  6,  5,  4],
    [ 3,  2,  1,  0],
]

Bleu

Entrée :

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

Sortie:

[
    [10, 11,  8,  9],
    [14, 15,  9,  8],
    [ 2,  3,  0,  1],
    [ 6,  7,  4,  5],
]

Un peu de code

const encryptedData = compressToUint8Array(cipher);
const squareWidth = Math.ceil(Math.sqrt(encryptedData.length));
const squaredData = new Uint8Array(
    new ArrayBuffer(squareWidth * squareWidth),
);
squaredData.set(encryptedData, 0);
const reds = red(squaredData, squareWidth);
const greens = green(squaredData, squareWidth);
const blues = blue(squaredData, squareWidth);
await draw(reds, greens, blues, options);

On teste ?

Et le décodage ?

  const rgba = await undraw(path, options);
  const code = rhizomize(rgba);
  const tab = new Uint8Array(new ArrayBuffer(code.length));
  tab.set(code, 0);
  const data = decompressFromUint8Array(tab);

Rhizomize

export const rhizomize = (rgba: RGBAColor[][]): number[] => {
  const size = 253 - getSize(rgba) - 2;
  const { left, top, right, bottom } = getDecals(rgba);
  const reds = unred(rgba, size, { left, top, right, bottom });
  const greens = ungreen(rgba, size, { left, top, right, bottom });
  const blues = unblue(rgba, size, { left, top, right, bottom });
  const res: number[] = [];
  for (let i = 0; i < size * size; ++i) {
    if (reds[i] !== -1 && (reds[i] === greens[i] || reds[i] === blues[i]))
      res.push(reds[i]);
    else if (greens[i] !== -1 && greens[i] === blues[i]) res.push(greens[i]);
    else res.push(blues[i]);
  }

  const data = removeLastZeros(res);

  if (2 * Math.floor(data.length / 2) !== data.length) data.push(0);
  return data;
};

On teste ?

On fait l’bilan, calmement

en s’remémorant chaque instant

Passé, Présent !

Futur ?

Sur quel réseau social les projets tombent toujours à l’eau ?

Truiteur

Merci pour votre attention