[RAILS] [Ruby] Générer un code QR concaténé avec rqrcode (Knowledge)
Qu'est-ce qu'un code QR consolidé?
- Le code QR a une "fonction de concaténation" qui divise les données longues en jusqu'à 16 codes QR et les combine lors de la lecture. (Pour plus de détails, consultez QR Code.com)
- Au Japon, vous le verrez souvent avec les ordonnances que vous recevez des hôpitaux / cliniques.
- La fonction de sortie est prise en charge par des bibliothèques de sortie de formulaire tierces, mais il est difficile de la trouver dans la bibliothèque OSS, donc je l'ai utilisée rqrcode. J'ai modifié rqrcode) pour qu'il puisse être sorti.
- Cette fois, la cible est de sortir le code QR concaténé à enregistrer dans la «prescription» ci-dessus, donc seul le code QR en mode «8bit_byte» est ciblé.
Comment puis-je obtenir un code QR consolidé?
-
Dans le cas d'un code QR normal, la partie d'en-tête des données à écrire a la structure suivante.
-
Il existe 1 à 40 versions du code QR (= taille du code QR), et la taille des données pouvant être enregistrées dans un code QR change en conséquence. (Voir ici)
-
Il semble que la spécification de version du code QR soit écrite à un endroit différent de la partie d'en-tête, elle est donc omise ici.
-
La longueur SS est variable entre 8 et 16 bits selon la version du code QR et le mode d'encodage.
- |
longueur |
Contenu à enregistrer |
E |
4bit |
Mode d'encodage(Voir le tableau ci-dessous) |
SS |
(variable) |
Enregistrez la longueur des données à enregistrer dans le code QR |
Mode d'encodage |
Valeur représentant le mode |
numeric |
1 (0b0001) |
alpha_numeric |
2 (0b0010) |
8bit_byte |
4 (0b0100) |
- Pour le code QR concaténé en mode
8bit_byte
, enregistrez la partie d'en-tête comme suit.
- Je me suis référé à ici.
- |
longueur |
Contenu à enregistrer |
3 |
4bit |
Mode affichant le code QR concaténé(0b0011) |
N |
4bit |
Numéro de séquence du code QR à concaténer(Numéro de série de 0 à 15) |
T |
4bit |
Dernier numéro de séquence du code QR(Numéro de série de 0 à 15) |
PP |
8bit |
Valeur de parité de toutes les données(Valeur XOR de tous les octets) |
E |
4bit |
Mode d'encodage(8bit_byte = 4) |
SS |
(variable) |
Enregistrez la longueur des données à enregistrer dans un code QR |
- Donc, pour obtenir le code QR concaténé, suivez la procédure ci-dessous.
- Déterminez la version (taille) du code QR concaténé.
- Le nombre maximum de connexions est de 16.
―― De plus, il semble que la quantité de données pouvant être enregistrées avec un code QR concaténé soit de 2 octets de moins qu'avec un code QR normal. (Je pense que la quantité de données a augmenté de 20 bits, mais pour une raison quelconque, il semble qu'il peut enregistrer jusqu'à -2 octets)
――Il est nécessaire de décider de la version en tenant compte des deux points ci-dessus.
- Habituellement, tous les codes QR sont créés avec la même version (taille). (Je n'ai pas essayé de concaténer des codes QR avec différentes versions, mais il est prudent de l'éviter car certains lecteurs peuvent ne pas être en mesure de le lire.)
- Calculez la parité à partir des données stockées dans le code QR. (Valeur XOR de tous les octets = 8 bits)
- Divisez les données pour qu'elles tiennent dans le code QR afin qu'il tienne dans un code QR. (Capacité de chaque code QR - assurez-vous qu'il tient dans 2 octets)
- Générez autant de codes QR que vous avez besoin et restituer chacun d'eux.
- Spécifiez la même «valeur de parité» et le «dernier numéro de séquence» pour tous les codes QR.
- Spécifiez le "numéro séquentiel" et les données à stocker pour chaque code QR.
- La sortie du code QR concaténé en modifiant réellement rqrcode est expliquée dans Pratique.
Veuillez noter que chaque lecteur se comporte différemment.
- Les scanners de codes à barres de type laser sont utilisés dans des opérations telles que les pharmacies. Comme ceux-ci sont assez chers, il est un peu difficile de préparer l'équipement pour la vérification du fonctionnement. (Cela m'intéressait aussi personnellement, alors j'ai acheté un article d'occasion à bas prix chez Yahoo! Ok. Il semble qu'il soit fréquemment répertorié de manière inattendue.)
- Donc, jusqu'à la confirmation finale à l'aide du lecteur de code à barres, j'ai utilisé une application pour smartphone prenant en charge la lecture de code QR consolidée pour confirmer l'opération. (Pour les applications iOS, [Iconit](https://apps.apple.com/jp/app/qr%E3%82%B3%E3%83%BC%E3%83%89%E3%83%AA% E3% 83% BC% E3% 83% 80% E3% 83% BC-% E3% 83% 90% E3% 83% BC% E3% 82% B3% E3% 83% BC% E3% 83% 89% E3 % 83% AA% E3% 83% BC% E3% 83% 80% E3% 83% BC-% E3% 82% A2% E3% 82% A4% E3% 82% B3% E3% 83% 8B% E3% 83% 83% E3% 83% 88 / id480090210) ・ [Pomera QR Code Reader](https://apps.apple.com/jp/app/%E3%83%9D%E3%83%A1%E3%83 % A9qr% E3% 82% B3% E3% 83% BC% E3% 83% 89% E3% 83% AA% E3% 83% BC% E3% 83% 80% E3% 83% BC / id371963393) · QRdeCODE Je n'ai pu trouver que 3 types)
- Cependant, le comportement de l'application de lecture et du ** lecteur de code-barres ** peut différer considérablement selon le produit.
- Il semble y en avoir qui n'ont pas confirmé si les valeurs de parité correspondent. (Bien que ce ne soit pas un gros problème en fonctionnement réel)
- S'il n'y a qu'un seul code QR (non divisé) même si le code QR concaténé est spécifié, il se peut que quelque chose ne puisse pas être lu. (Si la quantité de données est petite, il semble préférable de sortir avec un code QR normal) (Actuellement, les détails sont reconfirmés)
- Certains caractères peuvent être déformés lorsque les octets supérieur et inférieur de Kanji (Shift JIS) chevauchent deux codes QR. (Ce comportement est souvent observé dans les applications)
- À partir de ce qui précède, il est plus sûr de préparer un environnement de vérification de fonctionnement en supposant que l'équipement réellement utilisé, en particulier pour un usage professionnel.
――Pour les scanners de codes à barres, il peut être préférable de préparer plusieurs types, y compris des modèles légèrement plus anciens.
Les références
Cet article a été rédigé en référence aux informations suivantes.