https://www.framboise314.fr/lecture-de-code-barres-avec-le-raspberry-pi/
IBM
Archives
🇺🇸 1974 🇺🇸
🇫🇷 1980 🇫🇷
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
Code 128
Et pleins d’autres
- codabar
- code11
- code39
- databar
- …
Image rare d’un code-barres se rebellant
contre un QRCode en milieu naturel
![]()
AZTEC
QR Code
![]()
QRCode : Fonctionnement
Hello world
Hello worldFinder Pattern
Hello worldSeparators Pattern
Hello worldTiming Pattern
Hello worldFormat Pattern
Hello world
Hello worldContent
QRCode : Alignment Pattern
Error Level
![]()
Datamatrix
Quelle est la différence entre Windows et un virus ?
Le virus il fonctionne !
3D réelle
![]()
3D couleur
![]()
Navilens
![]()
4D
![]()
Fridi
![]()
Idée
- Code 3D couleur
- Redondance énorme (1/4 de l’affichage permettrait de lire quand même)
- Sens de lecture comme les Datamatrices
- Stockage de l’information de la taille dans le canal alpha
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);
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 fait l’bilan, calmement
en s’remémorant chaque instant
Passé, Présent !
- Gain de temps énorme en magasin
- Ils sont partout
Futur ?
- Peu probable d’avoir des 3D pour le moment
- QRCode est le plus connu car simple et modifiable
Sur quel réseau social les projets tombent toujours à l’eau ?
Truiteur
Merci pour votre attention