, Génération d’un UUID

Un UUID (Universally Unique Identifier), également appelé GUID (Globally Unique Identifier), est un identifiant conçu pour être unique à l’échelle mondiale. Il est couramment utilisé dans les échanges de données via des webservices pour identifier de manière fiable des ressources.

Voici trois méthodes permettant de générer des UUID sur votre système IBM i.

1) En SQL

Depuis peu, la génération d’UUID est possible directement en SQL via la fonction scalaire GENERATE_UUID.

Nécessite :

IBM i 7.5 : SF99950 niveau 8

IBM i 7.4 : SF99704 niveau 29

2) En RPG

Il est également possible de générer un UUID en RPG en utilisant la procédure _GENUUID. Pour obtenir le résultat au format hexadécimal, il convient de l’associer à la procédure cvthc.

**free
ctl-opt dftactgrp(*no);

dcl-s uuidHexa   char(32) inz ;
dcl-c UUID_VERSION 4;

// DS d'un UUID
dcl-ds DSUUID qualified template;
   bytesProv  uns(10)  inz(%size(DSUUID));
   bytesAvail uns(10)  inz(0);
   version    uns(3)   inz(0);
   *n         char(7)  inz(*allx'00');
   uuid       char(16) inz(*allx'00');
End-ds;
dcl-ds UUID      likeds(DSUUID) inz(*LIKEDS);

// Prototype récupération UUID
dcl-pr generUUID extProc('_GENUUID');
   dsuuid likeds(DSUUID);
End-pr;

// Conversion caractère -> hexa
dcl-pr CharToHex ExtProc('cvthc');
   hexResult    Char(65534)  Options(*VarSize);
   charInput    Char(32767)  Options(*VarSize);
   charNibbles  Int(10)  Value;
End-Pr;

dcl-pi *n ;
end-pi ;

UUID.version = UUID_VERSION;

// génération de l'UUID
generUUID(UUID);

// Conversion en hexa
CharToHex ( uuidHexa : UUID.uuid : %Size(UUID.uuid) * 2 );

dsply %concat('-':%subst(uuidHexa:1:8):%subst(uuidHexa:9:4):
      %subst(uuidHexa:13:4):%subst(uuidHexa:17:4):
      %subst(uuidHexa:21:12)) ;

*inlr = *on;

3) Opensource

Dernière proposition, utiliser la commande uuidgen.

Nécessite libuuid1