Skip to content

Instantly share code, notes, and snippets.

@ShawnMilo
Created December 3, 2013 20:55
Show Gist options
  • Save ShawnMilo/7777304 to your computer and use it in GitHub Desktop.
Save ShawnMilo/7777304 to your computer and use it in GitHub Desktop.
Validating a uuid4 with Python.
from uuid import UUID
def validate_uuid4(uuid_string):
"""
Validate that a UUID string is in
fact a valid uuid4.
Happily, the uuid module does the actual
checking for us.
It is vital that the 'version' kwarg be passed
to the UUID() call, otherwise any 32-character
hex string is considered valid.
"""
try:
val = UUID(uuid_string, version=4)
except ValueError:
# If it's a value error, then the string
# is not a valid hex code for a UUID.
return False
# If the uuid_string is a valid hex code,
# but an invalid uuid4,
# the UUID.__init__ will convert it to a
# valid uuid4. This is bad for validation purposes.
return val.hex == uuid_string
if __name__ == '__main__':
# Valid uuid, generated by uuid4():
x = '89eb35868a8247a4a911758a62601cf7'
print validate_uuid4(x)
# Same as above, except for the 17th charecter
# which is a valid hex string, but not a valid uuid4.
x = '89eb35868a8247a4c911758a62601cf7'
print validate_uuid4(x)
@apostoloss
Copy link

would it make sense to .lower() the string before comparing it? (just in case)

@ra-tolson
Copy link

@apostolos Sure, validators typical tell you whether and object passes some criteria; cleaning or scrubbing your inputs is where you massage things to give the user a break on things like capitalization. Then you validate the massaged version.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment