How to generate account number?

Andriy Kornatskyy andriy.kornatskyy at
Sat Nov 3 09:42:38 CET 2012

Steven, see below, please.

> From: steve+comp.lang.python at
> Subject: Re: How to generate account number?
> Date: Fri, 2 Nov 2012 22:39:31 +0000
> To: python-list at
> On Sat, 03 Nov 2012 00:13:19 +0300, Andriy Kornatskyy wrote:
>> Requirements for `account number` generator:
>> 1. Issue pseudo random consistent number (must be unique for dozen
>> millions of records)
> How much randomness do you need? From the perspective of any one user, a
> simple incrementing counter returns arbitrary values, which may be "close
> enough" to random.
> last_num = 103872 # Pick an arbitrary starting value.
> def get_account_number():
> """Return the next account number."""
> global last_num
> last_num += 1
> return last_num
> Stick that value in a database instead of a global, and you're done.
> What are the consequences of people guessing account numbers? If the
> consequences are serious, then you need to make account numbers
> cryptographically strong. If the account number alone is not important,
> then you don't.

Yes. There are consequences to not use sequential numbers, yet humans deal with it (enter as input somewhere, etc). The approach suggested here:

is using Feistel cipher to generate pseudo random thus makes guessing account numbers hard (impossible?).

>> 2. Easy check validity (without a need to make a database call)
> Add a check digit to the number you generate. There are all sorts of ways
> to do that. Here are two examples:

These tell me how to verify some code, but doesn't how to generate it. The approach suggested here:

gives you ability to customize `sample_f` function to make it unique to your business case.

>> Interested? Read more here:
> If you ask a question here, please keep the discussion here, don't split
> it to your personal blog.

The question was rhetorical with my answer in the blog and discussion here to reach something.

> Tell us your requirements in more detail, and we will try to help you.

I have presented solution to `account number` challenge. So it was share with community and seek for thoughts if any.


More information about the Python-list mailing list