Vérifier qu’un uuid est valide en Python 9


Si on teste du code qui utilise des uuid, on veut vérifier qu’on récupère bien des uuid valides là où on les attend.

Le plus simple est de déléguer cette vérification au module uuid qui est déjà celui qu’on utilise pour les produire.

from uuid import UUID
 
def is_uuid(uuid_string, version=4):
    try:
        # Si uuid_string est un code hex valide mais pas un uuid valid,
        # UUID() va quand même le convertir en uuid valide. Pour se prémunir
        # de ce problème, on check la version original (sans les tirets) avec
        # le code hex généré qui doivent être les mêmes.
        uid = UUID(uuid_string, version=version)
        return uid.hex == uuid_string.replace('-', '')
    except ValueError:
        return False

Et pouf:

>>> import uuid
 
>>> print(uuid.uuid4())
1049d03f-6f45-4637-89ff-f57567f6d022
 
>>> is_uuid('1049d03f-6f45-4637-89ff-f57567f6d022')
True
 
>>> is_uuid('1049d03f6f45463789fff57567f6d022')
True
 
>>> is_uuid('1049d03f6f45')
False

À chaque fois que j’utilise un uuid, j’ai un peu l’impression d’user la fabrique de l’univers, comme si je fabriquais quelque chose d’unique pour le mettre la poubelle, et qui n’existera plus jamais. Le gâchis d’un flocon de neige virtuel :)

9 thoughts on “Vérifier qu’un uuid est valide en Python

  • Xavier Combelle

    Ça parait légèrement utile, mais comme la principale problématique c’est d’être sur que l’uuid est bien unique, ce n’est que légèrement utile.

  • Brice

    Ça peut faire un test avant de faire un traitement plus lourd, comme appeler une API externe ou simplement faire une recherche en base de données. Si l’uuid n’est pas valide, on s’économise des traitements plus lourds que cette fonction.

  • Purexo

    @Xavier Combelle Le but n’est vraiment de vérifier si l’uuid est bien unique (ce qui doit être d’ailleurs impossible à moins d’avoir la liste de tout les uuid généré depuis le début de l’existence de ce standard) mais juste de vérifier que la chaine fourni est bien un uuid (en terme de format)

  • Alex

    À chaque fois que j’utilise un uuid, j’ai un peu l’impression d’user la fabrique de l’univers, comme si je fabriquais quelque chose d’unique pour le mettre la poubelle

    Je croyais être le seul à penser ça.

  • Metrogeek

    “À chaque fois que j’utilise un uuid, j’ai un peu l’impression d’user la fabrique de l’univers, comme si je fabriquais quelque chose d’unique pour le mettre la poubelle, et qui n’existera plus jamais. Le gâchis d’un flocon de neige virtuel”

    Je plussoie totalement

  • Kermit

    @Purexo : c’est le principe d’uuid “Unique Universal Identifier”. C’est un algo qui permet d’un avoir un identifiant “unique” sans registre centrale.

    Il y a tout de même une collision possible, mais au vue de nombre de combinaisons possibles (10^38), tu peux partir du principe qu’il est unique, sinon, ton utilisateur est Frane Selak.

  • Romathonat

    Pour se prévenir

    de se problème” -> de ce probleme (dans le commentaire du code)

    Content de revoir de l’agitation sur ce blog :)

  • Réchèr

    Oui, mais à ce compte là, à chaque fois que tu dis ou écris une phrase tu uses aussi la fabrique de l’univers. Puisqu’il existe un nombre fini (bien que très grand) de phrases possibles.

    Et que dire de tes empreintes digitales ?

Leave a comment

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.