パソコンのユーザー名の形式は [A-Za-z0-9._-] で最低8文字まで可能
概要
パソコン,メールアドレス,Webサービス,ゲームなどでアカウント作成時にユーザー名 (User name, username, ID) を登録する。
その際にユーザー名の形式・使用可能な文字について興味を持ったので調査した。
調査の結果,以下のことがわかった。
調査
意外とユーザー名について議論しているところがなく,その中でもっとも有力だったのが「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において,移植可能なユーザー名は [portable filename character set] の文字から構成される。ただし,先頭はハイフン (-
) であるべきではないとある。
そして,その具体的な文字はPOSIX:2001 (POSIX:2004と同じ) で定義されており,正規表現で表現すると以下の通りとなる。
[A-Za-z0-9._-]
言葉で表現すると,英数字と記号の._-
となる。
したがって,ユーザー名としてはこれらの文字が許容されるといえる。
スペース (
) や@
などはユーザー名としてはNGであることがわかった。
長さ
上記の質疑応答では使用可能な文字についてしか議論されておらず,ユーザー名の長さについて議論がなかった。気になったので同じくPOSIX:2004上で調査した。
POSIXには現在のユーザーのログイン名 (=ユーザー名) を返すlognameコマンドがあるので,こちらで何か情報がないかを探した。
lognameはgetlogin関数によりログイン名を取得する。そのgetlogin()
の説明をみると,以下のように最大文字数が定義されていた。
ユーザー名の最大文字数はLOGIN_NAME_MAX
変数で定義されているようだ。LOGIN_NAME_MAX
変数はsysconf() (getconfコマンド) で使われる変数で,この変数はさらに<limits.h>で以下のように定義されている。
上記に記載があるように,LOGIN_NAME_MAX
の最小値は_POSIX_LOGIN_NAME_MAX
で終端NULL文字込みで9文字と定義されている。
したがって,ユーザー名は少なくても最低8文字までは入力可能といえる。
なお,手元のUbuntu 20.04で以下のコマンドによりLOGIN_NAME_MAX
の値を調べた。
getconf LOGIN_NAME_MAX
256
自分のパソコンだとユーザー名は256文字まで可能なようだ。
結論
パソコン上のユーザー名の条件について調べた。その結果,以下の条件があることがわかった。
ユーザー名はパソコンを使う上でログインなどで一番最初に入力するデータだ。使用可能な文字と文字数について今までよく知らなかった。
使用可能の文字についてはだいたい想定通りだった。ユーザー名が最低8文字まで可能というのは新しい発見だった。しかし,フルネームだと8文字は普通に超過するので,あまり気にせず参考程度にしたい。
メールアドレスなどユーザー名にも使われる部分には,+
や@
など変な記号などはできるだけ避けるようにして,記号を使う場合は_.-
を心がけたい。