As noted by the answers, I don't think this is related to usability. Like Shroedingers Cat my first impression is that this is related to the restriction of variable names or other identifiers in software; usernames have simply inherited these restrictions, possibly due to habit or re-use of validation code.
The question is, why were other identifiers restricted this way?
Some possibilities:
If you want to use "7d" to denote "7 in decimal" or "7 as a double-precision floating point number" then that immediately rules it, and anything like it, out as a variable name. Something like
7d = 7d;
would be ambiguous at best and dangerous at worst. Similarly names with only numbers are right out.It makes parsing easier if you can assume that any token beginning with a digit is a number. Writing a regex that handles forms like "7001", "700d", and "700dd" appropriately is more complicated if you're using some of them as identifiers. (Not to mention that 700dd is a valid hex number, so you'd have to account for a prefixing "0x" or similar as well.)
The use of whitespace and line numbers could also be a factor; see Roy Dictus's answer on a related Stack Overflow questiona related Stack Overflow question.
These issues can be overcome, and some programming languages allow identifiers that start with digits, but it's certainly true that it's easier and simpler to disallow it. Allowing it doesn't provide anything that I would consider a benefit in exchange for the complexity (however slight).
Now it is entirely possible that there are some usability-related reasons for this as well. Pure speculation:
Before login systems like this and usernames like
surferdude99
were common, I would presume that an architect of such a system thought of identifiers as actual, you know, identifiers. Something likematt.read
. Given two people with the name name,matt.read1
andmatt.read2
make perfect sense.2matt.read
is less natural and certainly something like27blah234q
doesn't mesh with that system, so number-first identifiers were disallowed.Something like
99OO
looks like9900
. Of courseOO99
suffers the same issue, but people are less used to seeing numbers with leading zeroes, so only the former case was disallowed. Possibly, the common standards of case insensitivity and presentation of usernames as all lowercase are related to solving these problems.