GS1 DM широко используется в области сериализации и трассы и трассировки, например, Для лекарственных средств Serialization.
GS1 Datamatrix - это обычная данных Datamatrix (позже в Text - DM), но с ведущим символом FNC1, которая позволяет устройству сканирования идентифицировать, что это Datamatrix GS1, а не обычная Datamatrix.
Код: Выделить всё
01048123231123452172KAVEK5HqOQW{GS}91KZF0{GS}92endxMQYZAymmN9rTCsWwm4gcU1oihAn726B86OLBnh0=
01048702231123452179LimKz7sKYyF{GS}91KZF0{GS}92VllFTqxoBYKxfjjd/uLpXe4Sbm3+3foXpen0DLGIgWQ=
< /code>
Эти примеры являются уникальными идентификаторами отдельных медицины + так называемых криптово-ключа и крипто-кода. Такие идентификаторы используются в сериализации в таких странах СНГ, как Казахстан, Узбекистан и Беларусь, Россия. {Gs1} - это символ сепаратора группы с ASCII 29 кодом. Это не имеет значения для самой задачи, просто для того, чтобы дать вам какой -то контекст. Код, чтобы «преобразовать» этот код в GS1 DataMatrix, когда я генерирую DM, используя упомянутую библиотеку Python. < /p>
** мои выводы и вопросы до сих пор ** (пожалуйста, исправьте мой, если я неправ): < /p>
Символ FNC1 не включен в один коды ASCI или ASCI. ASCII 256 означает, как нет такой специфической кодирования). Насколько я понимаю, он не включен в какую -либо существующую кодирование, поскольку FNC1: a) не имеет графического представления, и B) не предназначено для того, чтобы быть частью какого -либо кодирования, поскольку это функциональный «символ», который является частью самого стандарта DM GS1. Что бы это ни значило. Но, насколько я понимаю, это не так, поскольку FNC1 не включен в какую -либо таблицу кодирования по причинам, которые я дал в предыдущем пункте. Например. Для UTF-8 или других кодировки символом с кодом 232 является «è» или какой-то другой символ, который определенно не является FNC1, поскольку FNC1 не может иметь какого-либо графического представления. 0104607045191708211NSBA931BA63A \ F91EE07 \ F92OOQOEKYX9KUYMJ2ZUDHHFVAM5IP2M/R3BO5+JE4QE4 =
Существующие библиотеки для генерации DataMatrix для Python в основном очень задокументированы, особенно на деталях использования или примерах. Или даже не иметь никакой документации. Но, насколько я понимаю, FNC1 как ведущий символ должен быть пропущен сканером и служит исключительно для идентификации формата DM GS1. Поэтому мне интересно, является ли это неправильной обработкой GS1 DM на стороне мобильного приложения или неправильного здания GS1 DM производителями (гораздо менее вероятно). Или также, может быть, я неправильно понимаю проблему. from PIL import Image
from pylibdmtx.pylibdmtx import encode
from datetime import datetime
import os
# FNC1 = chr(232)
# FNC1 = FNC1.encode("utf-8")
# FNC1 = bytes.fromhex("E8").decode('utf-8')
GS1 = chr(29)
DMs = []
class Dm:
def __init__(self, gtin, sn, key, code):
self.gtin = gtin
self.sn = sn
self.key = key
self.code = code
self.dmImg = self.generateDmImg()
def strToUTF8(self, str):
return str.encode('utf_8')
def __str__(self):
return self.getDmContent()
def getSgtin(self):
return "01" + self.gtin + "21" + self.sn
def getDmContent(self):
str = "01" + self.gtin + "21" + self.sn + GS1 + "91" + self.key + GS1 + "92" + self.code
# str = FNC1 + "01" + self.gtin + "21" + self.sn + GS1 + "91" + self.key + GS1 + "92" + self.code
return str
def generateDmImg(self):
dmContent = self.getDmContent()
encoded = encode(dmContent)
dmImg = Image.frombytes('RGB', (encoded.width, encoded.height), encoded.pixels)
return dmImg
def saveDmImgToFile(self, filename):
self.dmImg.save(filename)
def read_file(filename):
# read text strings from the file
with open(filename) as f:
text_strings = f.readlines()
return text_strings
def getListOfDMs(text_strings):
DMs = []
for text in text_strings:
if (len(text.strip()) > 0):
text_split = text.split(";")
dm = Dm(text_split[0].strip(), text_split[1].strip(), text_split[2].strip(), text_split[3].strip())
DMs.append(dm)
return DMs
# ============ MAIN PROGRAM =================
# res = read_file("src_files/source1.csv")
res = read_file("source1.csv")
DMs = getListOfDMs(res)
# for dm in DMs:
# print(dm)
# generate a PNG image for each text string
i = 1
for dm in DMs:
now = datetime.now()
timestamp = now.strftime("%d_%m_%Y_%H_%M_%S")
dm.saveDmImgToFile(os.path.join("results", dm.sn + "_" + timestamp + "_" + str(i) + ".png"))
i += 1
# dm = DMs[0]
# now = datetime.now()
# timestamp = now.strftime("%d_%m_%Y_%H_%M_%S")
# dm.saveDmImgToFile(os.path.join("results", dm.sn + "_" + timestamp + "_" + str(i) + ".png"))
< /code>
Вот текстовый пример файла Source1.csv (4 столбцы: Gtin, SN, Crypto-Key, Crypto-Code): < /p>
04812323112345;72KAVEK5HqOQW;KZF0;endxMQYZAymmN9rTCsWwm4gcU1oihAn726B86OLBnh0=
04812323112345;79LimKz7sKYyF;KZF0;VllFTqxoBYKxfjjd/uLpXe4Sbm3+3foXpen0DLGIgWQ=
04812323112345;7GaGJ1jCrfxID;KZF0;c2l2SH8LOYmbZK95S8ENwhCQXjmwKWd5BgfA+Pwv6nE=
04812323112345;7HKrat9IGg2wZ;KZF0;cmt5NuKP23flUwDyJolFj7NMVR+K7vALjEO3ktFToGY=
Подробнее здесь: https://stackoverflow.com/questions/754 ... ule-includ