Pablo 72311d48ea
CI/CD Pipeline / Build APK (push) Has been cancelled
CI/CD Pipeline / Run Tests (push) Has been cancelled
Build Android APK / Build APK (push) Failing after 12m54s
Release APK / Create Release (push) Failing after 2m34s
modified build for gitea workflow
2026-03-09 23:31:25 +01:00
2026-03-09 22:33:43 +01:00
2026-03-09 22:23:07 +01:00
2026-03-09 22:23:07 +01:00
2026-03-09 22:23:07 +01:00
2026-03-09 22:23:07 +01:00
2026-03-09 22:23:07 +01:00
2026-03-09 22:23:07 +01:00

iTartanas - Lector de Tarjeta Millennium

Aplicación Android para leer tarjetas Millennium del sistema de transporte público mediante NFC.

Características

Lectura de número de tarjeta: Obtiene y muestra el número completo de la Tarjeta Millennium
Consulta de saldo: Muestra el saldo actual disponible en la tarjeta
Últimos movimientos: Visualiza los últimos 3 movimientos/transacciones de la tarjeta
Interfaz moderna: Diseño con Material 3 y Jetpack Compose
Detección automática: Lee la tarjeta automáticamente al acercarla al dispositivo

Requisitos

  • Dispositivo Android con NFC
  • Android 7.0 (API 24) o superior
  • NFC activado en el dispositivo

Funcionalidades implementadas

La aplicación implementa las siguientes funcionalidades basadas en el código original de iTranvias:

  1. Comunicación NFC con protocolo ISO-DEP

    • Selección de red de transporte
    • Lectura de entorno
    • Lectura de contrato
    • Lectura de registros de eventos (últimos movimientos)
  2. Procesamiento de datos

    • Decodificación de números de tarjeta BCD a decimal
    • Conversión de PAN a IEP según aplicación
    • Cálculo de dígito de verificación Luhn
    • Enmascaramiento de datos sensibles
    • Conversión de saldo de céntimos a euros
    • Parseo de registros de eventos con fecha, hora, tipo y ubicación
  3. Interfaz de usuario

    • Pantalla de espera con instrucciones
    • Indicador de progreso durante la lectura
    • Visualización de datos: número de tarjeta, saldo y últimos movimientos
    • Lista de movimientos con fecha, hora, tipo de operación e importe
    • Manejo de errores con mensajes descriptivos

Cómo usar

  1. Instala la aplicación en tu dispositivo Android
  2. Asegúrate de que el NFC esté activado
  3. Abre la aplicación iTartanas
  4. Acerca tu Tarjeta Millennium al lector NFC del dispositivo
  5. La aplicación leerá automáticamente:
    • Número de tarjeta
    • Saldo actual
    • Últimos 3 movimientos (fecha, hora, tipo de operación e importe)

Tecnologías utilizadas

  • Kotlin: Lenguaje de programación principal
  • Jetpack Compose: Framework de UI moderna
  • Material 3: Diseño de interfaz
  • Coroutines: Manejo de operaciones asíncronas
  • NFC Android API: Comunicación con tarjetas NFC/ISO-DEP

Estructura del proyecto

app/src/main/java/com/pjpmosteiro/itartanas/
├── MainActivity.kt                    # Actividad principal con UI
├── nfc/
│   └── CardRepositoryImpl.kt         # Lógica de lectura NFC y procesamiento
└── ui/theme/                          # Tema de la aplicación

Permisos

La aplicación requiere los siguientes permisos:

  • android.permission.NFC: Para acceder al hardware NFC
  • android.hardware.nfc: Hardware NFC requerido

Notas técnicas

Protocolo de comunicación

La aplicación utiliza comandos APDU para comunicarse con la tarjeta:

  1. SELECT Transport Network (0x80 0x26 0x4F 0x11 0x0A)
  2. READ Environment (0x80 0x32 0x00 0x00 0x18)
  3. READ Contract (0x80 0x2E 0x01 0x00 0x20)

Formato de datos

  • Número de tarjeta: 16 dígitos formateados en grupos de 4
  • Saldo: Almacenado en 3 bytes (big-endian) en céntimos, convertido a euros
  • Movimientos: Últimos 3 registros de eventos con:
    • Fecha y hora de la operación
    • Tipo de operación (Carga, Validación, etc.)
    • Importe de la operación (si aplica)
    • Ubicación/línea (si está disponible)

Créditos

Basado en el análisis del código decompilado de la aplicación iTranvias original.

Licencia

Este proyecto es de código abierto para fines educativos y de aprendizaje.

S
Description
App de iTartanas para lectura de Millennium.
Readme 1.5 MiB
2026-03-09 23:31:25 +01:00
Languages
Kotlin 100%