-
-
Save dav009/12a62e6855fea23fb525a6c9d509b9db to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
Ejercicio QR Text Parse | |
Un codigo QR puede contener texto plano, como el siguiente: | |
000201010212501127288632702512600220290023010000050176943520460125303032540510.005802AR2611ar.com.vale5914Tamara Bernath6012Buenos Aires621008000502016304bbd0 | |
Y en este caso, el texto tiene una codificacion que sigue un formato especifico. | |
El texto esta formado por paquetes sucesivos, que a su vez estan formados por 3 unidades: | |
- Numero de campo (n): los primeros 2 bytes | |
- Largo del campo (L): los siguientes 2 bytes | |
- Contenido del campo: los siguientes L bytes | |
Aplicando esto al texto de ejemplo, obtendriamos que el primer paquete es: | |
package = 000201 | |
n = 00 | |
L = 02 | |
content = 01 | |
El segundo: | |
package = 010212 | |
n = 01 | |
L = 02 | |
content = 12 | |
El tercero: | |
package = 501127288632702 | |
n = 50 | |
L = 11 | |
content = 27288632702 | |
Y asi sucesivamente. | |
El ejercicio consiste en desarrollar un script que tenga por entrada un texto plano como el del ejemplo, | |
y su salida sea una descripcion de los packages que contenga la entrada (numero, largo y contenido). | |
""" | |
class QRTextParse: | |
qr_code = None | |
packages = None | |
def __init__(self, qr_code, packages=None): | |
self.qr_code = qr_code | |
self.packages = packages | |
def print_packages(self): | |
if isinstance(self.packages, list): | |
for package in self.packages: | |
print(f'Número de campo: {package[0]} Longitud de campo: {package[1]} Contenido: {package[2]}') | |
def get_packages(self): | |
if not self.packages: | |
self.packages = list() | |
while len(self.qr_code) > 0: | |
field_number = self.qr_code[:2] | |
field_long = self.qr_code[2:4] | |
try: | |
L_bytes = int(field_long) + 4 | |
except ValueError: | |
return 'The QR Code has not a valid format.' | |
field_content = self.qr_code[4:L_bytes] | |
self.qr_code = self.qr_code[L_bytes:] | |
# construct package | |
package = [field_number, field_long, field_content] | |
self.packages.append(package) | |
return self.packages | |
def decoder(self): | |
if isinstance(self.qr_code, str) and len(self.qr_code) != 0: | |
return self.get_packages() | |
else: | |
return 'The QR Code is invalid.' | |
if __name__ == '__main__': | |
sample_qr = '000201010212501127288632702512600220290023010000050176943520460125303032540510.005802AR2611ar.com.vale5914Tamara Bernath6012Buenos Aires621008000502016304bbd0' | |
my_qr = QRTextParse(qr_code=sample_qr) | |
my_qr.decoder() | |
my_qr.print_packages() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
como lo haria yo?
no estoy chequeando la correctitud. mayormente preferencias.