LoginSignup
1
1

某銀行のネット振込で確認番号の入力を自動化するスクリプト

Last updated at Posted at 2024-04-01

塞がれたら嫌なので、具体的にどの銀行で使えるのかは言いませんし、どの銀行で使えるかも聞かないでください。(ヒントはSなんとか信託)
使い方と利用用途がわかる方だけ、ご活用ください。

追記

Chromeの拡張機能版を作りました。こっちのほうが簡単に使えると思います。

※拡張機能版を使う場合、以下に記載するScriptAutoRunnerを使ったやり方は使用しないでください。競合する可能性があるため

デモ

See the Pen 某銀行のネット振込で確認番号の入力を自動化するスクリプト by qwe001 (@qwe001) on CodePen.

実装

スクリプトはChromeの拡張機能の ScriptAutoRunner に登録することで使用可能です。

const alphabet = ["A", "B", "C", "D", "E"];
const directCardNumbers = [
  ["01", "02", "03", "04", "05"], // A1,B1,C1,D1,E1 の数字を入力
  ["11", "12", "13", "14", "15"], // A2,B2,C2,D2,E2 の数字を入力
  ["21", "22", "23", "24", "25"], // A3,B3,C3,D3,E3 の数字を入力
  ["31", "32", "33", "34", "35"], // A4,B4,C4,D4,E4 の数字を入力
  ["41", "42", "43", "44", "45"], // A5,B5,C5,D5,E5 の数字を入力
];

/**
 * 確認番号のマッピングデータを作成する
 *
 * @return {Object-array} mappedCardNumbers - アルファベットごとに整理し直した確認番号一覧
 */
function makeDirectNumberMaps()
{
  const mappedCardNumbers = {};
  alphabet.forEach((letter, index) => {
    const columnNumbers = directCardNumbers.map(row => row[index]);
    mappedCardNumbers[letter] = columnNumbers; // e.g. { "A": ["01", "11", "21", "31", "41"] }
  });
  return mappedCardNumbers;
}

/**
 * 全角文字を半角文字に変換する
 *
 * @param {String} str - 変換対象の文字列
 * @return {String} halfWidthText - 変換された半角文字列
 */
function zenkaku2Hankaku(str)
{
  const halfWidthText = str.replace(/[A-Za-z0-9-]/g, function(s) {
    return String.fromCharCode(s.charCodeAt(0) - 0xfee0);
  });
  return halfWidthText;
}

/**
 * 現在求められている確認番号のキーを配列で返す
 *
 * @return {Array} currentKeys - 確認番号のキー配列 e.g. ["A-1", "B-2", "D-5"]
 */
function getCurrentKeys()
{
  let currentKeys = [];
  const targets = 'span.kakunin-no-label > nobr';
  const kakuninLabels = document.querySelectorAll(targets);

  kakuninLabels.forEach(label => {
    const labelText = label.textContent.trim().toUpperCase(); // e.g. "A-1"
    const currentKey = zenkaku2Hankaku(labelText); // e.g. "A-1"
    currentKeys.push(currentKey);
  });

  console.log("currentKeys:", currentKeys);
  return currentKeys;
}

/**
 * 現在求められている確認番号の値を配列で返す
 *
 * @param {Array} currentKeys - 確認番号のキー配列 e.g. ["A-1", "B-2", "D-5"]
 * @return {Array} currentNumbers - 現在の確認番号の値配列 e.g. ["01", "12", "44"]
 */
function getCurrentNumbers(currentKeys)
{
  let currentNumbers = [];
  const directNumbers = makeDirectNumberMaps();

  currentKeys.map(currentKey => {
    const [columnLetter, rowNumber] = currentKey.split('-');
    const columnIndex = alphabet.indexOf(columnLetter);
    const rowIdx = parseInt(rowNumber, 10) - 1;

    if (columnIndex >= 0 && rowIdx >= 0 && directNumbers[columnLetter]) {
      const currentNumber = directNumbers[columnLetter][rowIdx];
      currentNumbers.push(currentNumber);
    }
  });

  console.log("currentNumbers:", currentNumbers);
  return currentNumbers;
}

/**
 * 入力欄に確認番号をセットする
 */
function autoFillNumbers()
{
  const currentKeys = getCurrentKeys();
  const currentNumbers = getCurrentNumbers(currentKeys);
  const targets = 'input.kakunin-no-field';
  const inputFields = document.querySelectorAll(targets);

  inputFields.forEach((field, index) => {
    field.value = currentNumbers[index] || ''; // 現在の番号がない場合は空文字列をセット
  });
}

// スクリプト実行
autoFillNumbers();

追記 ScriptAutoRunner の使い方について

以下の記事の説明がわかりやすかったです

1
1
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
1
1