108 lines
3.6 KiB
Markdown
108 lines
3.6 KiB
Markdown
# 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.
|
|
|