I have not tested this thoroughly but I was looking for a newsletter implementation and found satchmo unique_id. Looking around I came to a rewrite which reduces a large amount of code and makes use of slugify():
''dropped previous one and declared after slugify() implementation''
def generate_id(first_name=None, last_name=None):
from django.contrib.auth.models import User
return slugify(first_name + last_name, instance=User(), slug_field='username')
Reported by rmendonca