パソコンのユーザー名の形式は [A-Za-z0-9._-] で最低8文字まで可能

概要

パソコン,メールアドレス,Webサービス,ゲームなどでアカウント作成時にユーザー名 (User name, username, ID) を登録する。

その際にユーザー名の形式・使用可能な文字について興味を持ったので調査した。

調査の結果,以下のことがわかった。

ユーザー名の条件
  • 使用可能文字: [A-Za-z0-9._-] の正規表現 (ただし,先頭は-以外)。
  • 文字数: 最低8文字まで可能。9文字以上は実装依存。

調査

意外とユーザー名について議論しているところがなく,その中でもっとも有力だったのが「user accounts – What characters should I use or not use in usernames on Linux? – Server Fault」での質疑応答だった。

こちらでは,GNU/Linuxのadduserコマンドによるユーザー名の形式について質問している。その際の名前の形式として,以下の正規表現がデフォルトで設定されている。

NAME_REGEX="^[a-z][-a-z0-9]*\$"

質問者は,adduserでのユーザー名に., -, _デフォルトで使えないことから,使用すべきでない文字について質問していた。

形式

この質問への回答でもっとも参考になったのが,POSIX規格を引用した回答だった。回答ではPOSIX:2017を参照していたが,個人的に推奨しており内容が同じPOSIX:2004を引用する。

POSIX:2004でのユーザー名に関する記述は以下の2箇所となる。

3.426 User Name
A string that is used to identify a user; see also User Database. To be portable across systems conforming to IEEE Std 1003.1-2001, the value is composed of characters from the portable filename character set. The hyphen should not be used as the first character of a portable user name.
3.426 User Name – Definitions – POSIX:2004
3.276 Portable Filename Character Set
The set of characters from which portable filenames are constructed.

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 . _ –
3.276 Portable Filename Character Set – Definitions – POSIX:2004

3.426 User Nameにおいて,移植可能なユーザー名は [portable filename character set] の文字から構成される。ただし,先頭はハイフン (-) であるべきではないとある。

そして,その具体的な文字はPOSIX:2001 (POSIX:2004と同じ) で定義されており,正規表現で表現すると以下の通りとなる。

[A-Za-z0-9._-]

言葉で表現すると,英数字と記号の._-となる。

したがって,ユーザー名としてはこれらの文字が許容されるといえる。

スペース ( ) や@などはユーザー名としてはNGであることがわかった。

長さ

上記の質疑応答では使用可能な文字についてしか議論されておらず,ユーザー名の長さについて議論がなかった。気になったので同じくPOSIX:2004上で調査した。

POSIXには現在のユーザーのログイン名 (=ユーザー名) を返すlognameコマンドがあるので,こちらで何か情報がないかを探した。

lognameはgetlogin関数によりログイン名を取得する。そのgetlogin()の説明をみると,以下のように最大文字数が定義されていた。

[TSF] [Option Start] The getlogin_r() function shall put the name associated by the login activity with the controlling terminal of the current process in the character array pointed to by name. The array is namesize characters long and should have space for the name and the terminating null character. The maximum size of the login name is {LOGIN_NAME_MAX}.

If getlogin_r() is successful, name points to the name the user used at login, even if there are several login names with the same user ID. [Option End]
getlogin – POSIX:2004

ユーザー名の最大文字数はLOGIN_NAME_MAX変数で定義されているようだ。LOGIN_NAME_MAX変数はsysconf() (getconfコマンド) で使われる変数で,この変数はさらに<limits.h>で以下のように定義されている。

{LOGIN_NAME_MAX}
Maximum length of a login name.
Minimum Acceptable Value: {_POSIX_LOGIN_NAME_MAX}

{_POSIX_LOGIN_NAME_MAX}
The size of the storage required for a login name, in bytes, including the terminating null.
Value: 9
<limits.h> – POSIX:2004

上記に記載があるように,LOGIN_NAME_MAXの最小値は_POSIX_LOGIN_NAME_MAXで終端NULL文字込みで9文字と定義されている。

したがって,ユーザー名は少なくても最低8文字までは入力可能といえる。

なお,手元のUbuntu 20.04で以下のコマンドによりLOGIN_NAME_MAXの値を調べた。

getconf LOGIN_NAME_MAX
256

自分のパソコンだとユーザー名は256文字まで可能なようだ。

結論

パソコン上のユーザー名の条件について調べた。その結果,以下の条件があることがわかった。

ユーザー名の条件
  • 使用可能文字: [A-Za-z0-9._-] の正規表現 (ただし,先頭は-以外)。
  • 文字数: 最低8文字まで可能。9文字以上は実装依存。

ユーザー名はパソコンを使う上でログインなどで一番最初に入力するデータだ。使用可能な文字と文字数について今までよく知らなかった。

使用可能の文字についてはだいたい想定通りだった。ユーザー名が最低8文字まで可能というのは新しい発見だった。しかし,フルネームだと8文字は普通に超過するので,あまり気にせず参考程度にしたい。

メールアドレスなどユーザー名にも使われる部分には,+@など変な記号などはできるだけ避けるようにして,記号を使う場合は_.-を心がけたい。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です