es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Conversión de NFC UID a Hex, Dec y Byte con python3

Estoy muy confundido/a sobre la lectura UID de las etiquetas NFC.

Tengo un lector NFC ACR122U (no estoy seguro/a si es relevante) configurado con pynfc. Tengo una etiqueta (Tipo de etiqueta 2), si uso tag.identifier.hex() para obtener el UID, que se menciona en la documentación, obtengo c9ccd97b que creo que es la representación en cadena del UID.

También tengo otra máquina simple de lectura de UID NFC, que pega el UID de la etiqueta y presiona enter. No sé exactamente su tipo, pero sé con certeza que solo puede leer 4 bytes.

Si uso la misma etiqueta con dicha lector de UID, obtengo 2ö778713ö5 que parece extraño. Intenté convertir c9ccd97b a bytes y obtener los primeros 4 bytes usando stringIO de Python, pero cuando vuelvo a convertirlo en cadena no obtengo 2ö778713ö5.

¿Alguna idea sobre qué pasos de conversión debo hacer para que pueda ver que la etiqueta es en realidad la misma con estos dos dispositivos?

EDITAR: Si conecto el lector simple a una máquina con Windows, obtengo 2077871305, así que ö=0. También encontré un pequeño archivo .exe con el que puedo cambiar el tipo de lectura. Si lo configuro como “8 no. en HEX inverso”, obtengo c9ccd97b, que es la salida deseada. Sin embargo, no sé qué significa “8 no. en HEX inverso” y no tengo idea de cómo hacer esta transformación en Python.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que estás experimentando algunos problemas con la lectura del UID de etiquetas NFC. El UID es un identificador único asignado a cada etiqueta y debe ser consistente entre diferentes lectores.

    En tu caso, parece que los dos lectores que estás usando están interpretando y presentando el UID de diferentes maneras. El primer lector te está dando una representación de cadena del UID en formato hexadecimal (c9ccd97b), mientras que el segundo lector te está dando una representación de cadena del UID en un formato diferente (2ö778713ö5).

    Para asegurarte de que la etiqueta es la misma en ambos dispositivos, deberás asegurarte de que estás utilizando el mismo formato para el UID.

    Mencionaste que el segundo lector solo puede leer 4 bytes del UID, lo que significa que probablemente esté utilizando un esquema de codificación diferente para representar el UID. Es posible que debas realizar algunas experimentaciones o investigaciones para determinar qué esquema de codificación está utilizando el segundo lector (por ejemplo, ASCII, UTF-8, etc.) y cómo convierte el UID a una cadena.

    Una vez que hayas identificado el esquema de codificación y el método de conversión utilizados por el segundo lector, puedes intentar replicarlo en tu código Python. Es posible que debas utilizar funciones de manipulación de cadenas (por ejemplo, replace(), split(), etc.) o funciones de codificación/decodificación (por ejemplo, encode(), decode()) para convertir el UID al formato adecuado.

    Alternativamente, si el segundo lector viene con una herramienta de software que puede cambiar el tipo de lectura, puedes intentar cambiar el tipo de lectura a “8 no. in HEX reverse” ya que te dio el resultado deseado. Sin embargo, aún recomendaría tratar de entender el método de conversión subyacente utilizado por el lector y replicarlo en tu código para obtener consistencia y confiabilidad.

Comments are closed.