Affichage des articles dont le libellé est e-billet. Afficher tous les articles
Affichage des articles dont le libellé est e-billet. Afficher tous les articles

vendredi 22 juin 2012

Codes barres et billets SNCF

Sur un certain nombre de documents de transport fournis par la SNCF, il y a un code-barres. Tantôt un code PDF417 (essentiellement sur les titres imprimés par les imprimantes de billets de train au format IATA), tantôt un code Aztec (la plupart du temps sur les billets à imprimer soi-même), tantôt un QR Code (sur les billets de bord notamment).

Autant les codes Aztec qui figurent notamment sur les confirmations e-billet et les cartes récentes de fidélité du Programme Voyageur peuvent être décodés via l'application android NeoReader, autant les codes barres PDF417 sont plus difficile à lire. Il n'existe pas à ma connaissance d'application gratuite qui les lit depuis un smartphone. La raison étant que cette technologie est plutôt faite pour être lue par un laser, et donc qu'il faut une très bonne photographie pour avoir une chance de les décoder. Pour les applications libres sur ordinateur, celles-ci n'en sont qu'au stade "alpha", et donc ne savent pas faire le traitement d'image nécéssaire à la lecture (il faut leur fournir une image « parfaite »).

Du coup, même si je peux maintenant lire le contenu du codes-barres de ma nouvelle carte grand voyageur, je ne sais pas ce qu'il y avait dans le code barres de l'ancienne[1], ni ce qu'il y a sur les billets de train, cartes de réduction, abonnements etc..

Je savais qu'il y avait du code dans ZXing (la bibliothèque derrière l'application Barcode Scanner) pour lire les PDF417, mais il est désactivé dans l'application Android. Il faut donc passer à la version en ligne de commande.

Pré processing

En espérant que le code de ZXing soit quand même un peu fonctionnel, je me suis dit qu'en fournissant une image parfaite ça pourrait marcher.

L'idée est de passer d'une image de ce type (prise avec mon téléphone) :

à un fichier comme ça :

Au bout de quelques tentatives, j'ai fini par trouver une procédure à la main avec Gimp qui consiste à extraire l'image tranche par tranche (qui font toutes 17 unités de largeur), redimensionner chaque tranche en une image de 17 pixels de large, réagrandir, et enfin vérifier à la main que l'image est conforme. Évidemment j'aurais pu automatiser ça, mais ça serait revenu à rajouter moi-même le code de détection dans ZXing, et je ne me sentais pas assez courageux pour faire ça.

Du coup je suis arrivé à lire le fameux contenu de ces mystérieux codes (dont je me doutais de toutes façons qu'il n'y aurait pas grand chose de plus que ce qui est écrit sur les billets).

Carte de fidélité

La première chose que j'ai décodé est mon ancienne carte grand voyageur. Ça ressemble au contenu des confirmations e-billet (le passage à la ligne est de moi) :

h0FV0000000000000000111000000000002/09/201007/12/201229090109XXXXXXXXX  
GODFROY            Quentin            1FZ3030/02/1980
On apprend au passage que la carte grand voyageur a un code tarif associé ("FZ30"), que le pseudo-billet est en première classe (le "1" juste devant le pseudo-tarif) et que les champs nom et prénom sont tronqués à 19 caractères. Pour le reste on devine assez bien. On pourra aussi remarquer ici que la différence entre la date de début et de fin de ma carte ne fait pas trois ans, signe que j'ai perdu ma première carte et que j'en ai demandé une nouvelle (changeant au passage son numéro).

Depuis un moment les cartes portent un code Aztec (probablement depuis que les cartes sont réellement utilisées dans les trains et que les premières remontées ont indiqué de fortes difficultés à faire avaler le code aux PDA). Le code Aztec contient peu ou prou la même chose :

h0FV0000000000000001111000000000001/06/201201/06/201329090109XXXXXXXXX  
GODFROY            QUENTIN             FZ3030/02/1980
La classe du pseudo-ticket a disparu, un "1" est apparu vers le début (j'en reparlerai plus tard), mon prénom est en majuscules.

Au final ce qui intéresse le PDA du contrôleur quand il scanne la carte voyageur pour trouver un e-billet c'est donc soit le numéro de client, soit le triplet nom/prénom/date de naissance (de toutes façons je ne vois pas ce que ça aurait pû être d'autre). Peut-être qu'il y a deux recherches successsives. En tout cas il m'est arrivé de voyager avec un e-billet pour lequel j'avais enregistré uniquement mon numéro d'abonné forfait sans mentionner ma carte grand voyageur alors que le contrôleur m'a retrouvé en scannant ma carte grand voyageur. Sans recoupement spécial de base de données il est probable que ce soit avec mon nom/prénom/date de naissance que le PDA du contrôleur a retrouvé mon billet. Une manière claire de vérifier serait d'essayer de voyager avec un e-billet créé sans entrer de numéro de client et de présenter la carte voyageur au contrôleur. Avis aux amateurs.

Billet normal

Reprenons le billet de l'entrée « Titres de transport : billets papier » (les "|" comme les passages à la ligne sont de moi) :

|e|E|DV|QLONTZ|301853252|1|1|11|0000000000|09|01|00|0|309|   |   |
FRPLY|FRFRA|09269 |3029|034|013|021|1|CJ11|AD|
FRFRA|FRGYW|33807 |    |034|   |   |2|CJ11|B |
Déjà, on peut remarquer que ce n'était pas la peine de masquer le code barres, il n'y a aucune information personnelle autre que celles qui figurent déjà en clair sur le billet. Ensuite, certains champs peuvent se deviner, mais pour les autres j'ai eu besoin du standard RCT2 (attention, gros PDF moche), que j'avais trouvé sur le site de l'European Railway Agency à une époque où je cherchais des informations sur les billets au format international.

Les informations se décodent ainsi :

  1. Zone générale
    1. Type d'entrée (ie., comment décoder la suite).
    2. Type de fonds : les billets peuvent utiliser différentes mises en pages pour marquer les données, ici "E" doit signifier que le billet a été mis en page comme un billet national.
    3. Type de titre de transport : ici, "DV" comme titre de transport national (il est possible dans certains cas d'avoir des titres de transport nationaux avec la mise en page habituelle des billets internationaux, indiquée par "R").
    4. Référence de la réservation.
    5. Numéro de titre de transport.
    6. Drapeau indiquant un vrai billet.
    7. Version des informations.
    8. Informations de chaînage. Ici c'est la page 1/1.
    9. Réservé.
    10. Type de carte de voyageur fréquent. Ici 09 comme le 09 annonçant les cartes voyageur qui suit le préfixe 290901 des numéros de clients chez SNCF.
    11. Un adulte.
    12. Zéro enfant.
    13. Dernier chiffre de l'année d'achat (il fallait l'inventer celui-là), ici 0 comme 2010.
    14. Quantième dans l'année du jour d'achat. J'ai donc acheté ce billet le 5 novembre 2010.
    15. Quantième de début de validité (le "not valid before" des billets d'avion).
    16. Quantième de fin de validité (le "not valid after" des billets d'avion).
  2. Premier segment
    1. Code gare de départ : Paris Gare de Lyon.
    2. Code gare d'arrivée : Frasne.
    3. Numéro de train, padé par des espaces.
    4. Code de sécurité du train (étrange, un hmac aurait été probablement mieux), qui a l'air d'être dépendant uniquement du numéro de train et du jour. C'est la seule information ne figurant pas en clair sur le billet.
    5. Quantième correspondant au segment. Ici comme il est inférieur au quantième d'achat, il faut comprendre que c'est l'année suivante. La date du voyage est donc le 3 février 2011.
    6. Numéro de voiture.
    7. Numéro de place.
    8. Classe.
    9. Code tarif (vide si "plein tarif"). Notez que les Prem's sont au plein tarif.
    10. Classe de service.
  3. Deuxième segment
    À noter que quand il n'y a pas de deuxième segment tous les champs sont remplacés par une espace, sauf la classe où figure une étoile '*', comme sur les billets.

Carte de réduction

gHEMRYIYXI6893886041111000000000008/07/201107/07/201229090108XXXXXXXXX  
NOM                PRENOM              CL0030/02/1980
Ça ressemble très fort au contenu des cartes de fidélité, avec en plus que le dossier et le numéro de titre sont renseignés. Ici c'est une carte escapades, parce que le numéro de client commence par 08 et le code tarif est CL00 (le code des billets au tarif escapades est CL11). Il n'y a absolument aucun doute qu'une telle carte pourrait servir de "support" e-billet. Ça marche peut-être même en pratique.

Confirmation e-billet

J'avais déjà décodé une confirmation imprimée à domicile, voici ce que contient une confirmation imprimée sur un carton à billet :

i1CVTAJNLC193970851121130/02/1980FRAETFRPMO0886612/100029090164XXXXXXXXX
NOM                PRENOM             2PN000          00000
C'est presque pareil, sauf que le nom et le prénom sont padés à droite par des espaces, alors que ceux-ci sont padés à gauche sur les confirmations imprimées à domicile.

Format général

Manifestement il y a un facteur commun. Tous les codes (y compris au format Aztec) commencent par le type, le fonds, le numéro de dossier, le numéro de titre, le drapeau de vrai billet, le numéro de version et enfin les informations de chaînage.

Deux remarques :

  • J'ai trouvé des pièces en "e", "g", "h", "i". À quoi correspondent les titres en "f" ? J'avais pensé aux coupons d'abonnement, mais ceux que j'ai sont en "g". Peut-être les titres-repas ?
  • Contrairement à ce que j'avais indiqué dans l'entrée sur les e-billets, je pense maintenant que le "0211" indique les mêmes choses que ici (vrai billet, version, chaînage), et donc que sur les confirmations e-billets éditées par voyages-sncf.com on a "oublié" de positionner à "1" le drapeau pour indiquer que les confirmations ne sont pas des specimens. Aurait-ce été oublié après les tests initiaux ? Bien sûr cette "erreur" n'a évidemment aucune importance puisque les confirmations e-billet ne sont que des pointeurs vers la base de donnée des e-billets.

[1] D'ailleurs, les contrôleurs avaient eux aussi eu beaucoup de mal à faire lire à leur PDA ma carte grand voyageur ancienne génération les rares fois où j'ai voyagé avec un e-billet. Depuis les codes sont au format Aztec nettement plus efficace, des PDA nouvelle génération ont un laser intégré et je n'utilise plus les e-billets. Du coup plus de risque d'incompatibilité.

jeudi 1 mars 2012

Confirmations, mémos, justificatifs de voyage e-billet

Je profite du fait que voyages-sncf.com a mis à jour la présentation des confirmations et justificatifs e-billets pour parler un peu des différentes pièces remises aux clients qui utilisent le service e-billet.

Confirmation ou mémo ?

Quand un client commande un e-billet, le système de réservation génère soit un « Mémo e-billet » (type de titre "CW"), soit une « Confirmation e-billet » (type de titre "CV"). La différence principale est que la confirmation comporte un code à lecture optique tandis que le mémo n'en comporte pas. Une autre différence est que le mémo peut contenir jusqu'à trois segments tandis que la confirmation n'en contient que deux (parce que le code à lecture optique prend de la place). Une confirmation est éditée quand le passager[1] ne dispose pas de carte d'identification SNCF (pour l'instant carte commerciale, carte d'abonnement, carte grand voyageur). Le but évident (à mon avis car je ne suis pas dans le secret des dieux) est d'éviter que le passager cumule des points sur une carte de fidélité qui ne lui appartient pas.

Éditeurs

Une fois que le titre de transport a été généré dans le système d'information, il faut l'éditer. Ce point est évidemment important pour les passagers qui ont une « Confirmation », nécessaire pour voyager. Je connais au moins trois émetteurs :

  1. Le réseau Gares (BLS, guichets)
  2. ebillet.voyages-sncf.com (essentiellement pour les clients de vsc)
  3. www.ebillet.sncf.com (essentiellement pour les clients d'agences de voyage)

Les agents d'accueil en gare peuvent aussi émettre des confirmations, mais je n'en ai jamais eu en main.

De manière intéressante, les informations reportées sur les confirmations/mémos sont différentes selon l'émetteur.

1. Réseau Gare

Confirmation[2] et mémo :

Bien que les informations basiques voyageur (placement, train, tarif etc.) soient évidemment identiques (mais réparties différemment, ce qui gêne mon sens de l'esthétique), on remarque quelques différences (en défaveur du mémo) :
  • De l'information sur le mode de paiement a disparu (le numéro de CB n'apparaît pas sur le mémo).
  • Bien que l'on ne le voie pas ici (le voyageur titulaire du premier billet n'en avait pas), le numéro de carte de fidélité n'apparaît plus dans le mémo e-billet (les contrôleurs ont besoin uniquement du numéro de client pour retrouver un passager). Certes dans le cas général il est identique au numéro de client, mais pas toujours. Sur le mémo, aucun moyen de savoir si j'ai rentré mon numéro de carte grand voyageur ou mon numéro d'abonné forfait (dans le cas d'une réservation forfait, c'est sans conséquence, mais pour un billet plus cher cela pourrait me priver de points de fidélite).
  • Pas de date d'achat sur le mémo.
  • Pas de code tarif sur les mémos.
Toutes ces absences sont probablement dûes au fait qu'on a souhaité économiser de la place sur les mémos pour pouvoir caser trois segments.

2. ebillet.voyages-sncf.com

Je ne sais pas faire lui faire sortir de mémo e-billet, il faudra se contenter de la confirmation (légèrement trafiquée afin de ne pas être accusé de contrefaçon) :

Remaques :
  • Contrairement à la présentation d'avant le kilométrage n'apparaît pas.
  • Aucune information de paiement.
  • La période est indiquée (alors qu'en première elle n'est pas indiquée en clair sur les billets papier).
  • Ce n'est pas visible ici, mais les noms des gares ne sont pas tronquées, preuve que ce n'est pas exactement tiré du système de réservation.
  • De même le tarif possède un petit texte explicatif (à la place du « Valable avec abonnement forfait »).
  • Le code à lecture optique (Aztec) contient les informations suivantes (les "|" sont de moi) :
    i0|CV|RMALTJ|782186322|0211|29/02/1981|FRADE|FRPST|02672|26/07|
    0029090161DDDDDDDDD|      GODFROY|      QUENTIN|1|FF98|0     00000
    ce qui se décode en
    1. Je ne sais pas.
    2. Confirmation Voyage.
    3. N° de dossier.
    4. N° de titre.
    5. Type de support (à rapporter au 0201 des identifiants de cartons à piste magnétique en haut à gauche). Voir cette entrée pour plus d'informations.
    6. Date de naissance (oui vous avez bien lu, elle est indiquée en clair, donc ne laissez pas traîner ne serait-ce qu'un numéro de dossier e-billet au cas où vous considérez que ce genre de chose est important. En fait il ne faut JAMAIS laisser fuiter[3] un numéro de dossier e-billet).
    7. Code gare de départ.
    8. Code gare d'arrivée.
    9. N° de train.
    10. Date du voyage (mais pourquoi est-elle sous ce format débile?).
    11. N° de client.
    12. Nom paddé par des espaces avant.
    13. Nom paddé par des espaces avant.
    14. 1ère classe.
    15. Code tarif.
    16. Je ne sais pas.

3. www.ebillet.sncf.com

Ce site est principalement utilisé par les agences de voyage pour fournir des confirmations et mémos aux voyageurs. Un moyen simple de différentier entre les deux est la mention d'un numéro de page en bas à droite. Globalement les informations rapportées sont très proches de celles fournies par le réseau gare. Les différents textes accompagnant les documents sont généralement synchronisés avec ceux des documents fournis par voyages-sncf.com, mais pas toujours (comme toujours quand de l'information est dupliquée).

Confirmation :

Différences notables avec les confirmations éditées par VSC :

  • Le numéro de page en bas à droite.
  • Présence du mode de paiement (mais sans détail).
  • Le nom des gares est strictement identique à celui repris sur les titres délivrés par le réseau gares (par exemple "Paris Montparnasse 1 et 2" devient "Paris Mont 1 et 2")
  • Présence du kilométrage
  • Le champ type de support dans le code à lecture optique devient 1211 (qui est à rapporter au 1201 des cartons à piste magnétiques fournis aux agences de voyage).
  • Le texte du tarif est identique (casse y compris) à ce qu'il y a sur les billets à piste magnétique.
  • Les heures sont à l'anglaise.
  • Le PDF est produit par Adobe LiveCycle, contre de l'opensource chez VSC (JasperReports).

Mémos :

Là ça ressemble pratiquement à ce qu'il y a sur le mémo présenté plus haut (c'est exactement le même trajet et dossier). Sauf qu'en plus là il est possible de voir le code tarif et de vérifier si la carte de fidélité a bien été prise en compte.

Justificatifs

Puisqu'il n'y a plus de titre de transport, la SNCF édite des justificatifs de voyage, disponibles 24h après l'arrivée théorique du train, et qui font office de pièce comptable.

Les trois principaux moyens sont aussi disponibles pour l'édition des justificatifs de voyage. De la même façon il y a de subtiles différences entre les informations reportées. Le nouveau format des justificatifs édités par VSC mentionne l'heure et le lieu d'achat (contrairement aux anciennes), mais plus le numéro de carte de fidélité ou la période du train (contrairement aux anciennes). Voici donc dans l'ordre :

Gares :

Pas de mention du tarif utilisé notamment.

VSC ancienne forme :

Mention du tarif, et du numéro de fidélité comme de client. Mais pas du numéro de titre.

SNCF directement :

Pas de mention du tarif ni de numéro de carte de fidélité. Par contre on voit le canal d'achat et le numéro de titre.

VSC nouvelle forme :

Le numéro de titre fait son apparition ainsi que l'endroit de l'achat. On perd le numéro de carte de fidélité et la mention de la période. Le tarif utilisé est maintenant accompagné du texte explicatif standard de VSC. Les couleurs dans les intitulés des colonnes du tableau rappellent maintenant le dégradé du logo SNCF. Remarquez comme l'heure d'achat est différente entre ce justificatif et le précédent, qui pourtant concernent le même billet (!!).

Quelle est la meilleure ? Aucune n'a l'air de contenir un l'ensemble des informations.

[1] Attention à la confusion entre client et passager. Ils ne sont pas toujours identiques (surtout pour les clients à haute contribution), et ont en général des objectifs différents.

[2] Remarquez comme le passager du premier trajet a composté sa confirmation e-billet, ce qui est parfaitement inutile, puisqu'il ne s'agit pas d'un titre de transport. Il n'est même pas sûr que le passager ait vraiment compris qu'il s'agissait de quelque chose de différent du billet habituel. Il reste de la pédagogie à faire. D'ailleurs le format de la confirmation a légèrement changé depuis l'introduction du e-billet : le texte « le e-billet est nominatif, personnel et non cessible » n'apparaissait pas au début.

[3] Dans mon cas je les laissés parce que ces dossiers sont suffisamment vieux pour ne plus être disponibles dans le système de réservation.