LoginSignup
7
6

More than 5 years have passed since last update.

推測されにくいパスワードを JavaScript でさっと生成する(ブックマークレット付き)

Last updated at Posted at 2018-03-07

パスワードの生成

下記スクリプトで、英数字、記号(スペースを除く)をランダムに混ぜて10桁のパスワードを生成します。

function generatePassword() {
  var first = '!'.charCodeAt();
  var last = '~'.charCodeAt();
  var password = '';

  for (var i = 0, max = 10; i < max; i += 1) {
    var code = first + (Math.random() * (last - first) | 0);
    password += String.fromCharCode(code);
  }

  return password;
}

パスワードに使用している文字列は、下記の通りです。

ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}

おまけ

パスワード生成後、クリップボードにコピーする

クリップボードへコピーするスクリプトは下記になります。
Range API を使っているので、IE9 以降、Edge、Chrome、Firefox、Safari は対応しています。

var password = generatePassword();

var elem = document.createElement('span');
elem.style.opacity = 0;
elem.textContent = password;
document.body.appendChild(elem);

var range = document.createRange();
range.selectNode(elem);
getSelection().removeAllRanges();
getSelection().addRange(range);

document.execCommand('copy');
document.body.removeChild(elem);

alert('以下のパスワードをクリップボードにコピーしました。\n\n' + password);

クリップボードにコピーするイメージ

ブックマークレット

下記文字列をコピーしてブックマーク URL に設定してください。

javascript:(function(){for(var a,b="!".charCodeAt(),c="~".charCodeAt(),d="",e=0;10>e;e+=1)d+=String.fromCharCode(b+(Math.random()*(c-b)|0));a=d;var f=document.createElement("span");f.style.opacity=0;f.textContent=a;document.body.appendChild(f);var g=document.createRange();g.selectNode(f);getSelection().removeAllRanges();getSelection().addRange(g);document.execCommand("copy");document.body.removeChild(f);
alert("\u4ee5\u4e0b\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u306b\u30b3\u30d4\u30fc\u3057\u307e\u3057\u305f\u3002\n\n"+a);})()

スプレッドシートに組み込む

スプレッドシートでパスワード管理している場合は、メニューバーから提供するのもありかと思います。パスワードの生成は記事冒頭にある generatePassword と同一内容です。

※ スプレッドシートでパスワード管理を推奨する内容ではありません、管理は自己責任でお願いします。

function onOpen(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var menus = [
    {name: 'パスワードの自動生成(選択中のセルに書き込まれます)', functionName: 'writePasswordToActiveRange'}
  ];
  sheet.addMenu('スクリプト', menus);
}

function writePasswordToActiveRange(){
  var range = SpreadsheetApp.getActiveRange();

  if (range.getValue() === '' || Browser.msgBox('現在のセルの内容を上書きしますか?') === 'ok') {
    range.setValue(generatePassword());
  }
}

function generatePassword() {
  var first = '!'.charCodeAt();
  var last = '~'.charCodeAt();
  var password = '';

  for (var i = 0, max = 10; i < max; i += 1) {
    var code = first + (Math.random() * (last - first) | 0);
    password += String.fromCharCode(code);
  }

  return password;
}

スプレッドシートに組み込んだイメージ

以上です。

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6