Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

パスワードの生成

下記スクリプトで、英数字、記号(スペースを除く)をランダムに混ぜて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;
}

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

以上です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした