数秘術による誕生日占いのアルゴリズムは、「西暦の生年月日を数字に分解し、1桁になるまで足し算を繰り返す」というものです。
ぞろ目の数字(2桁)が出たら、例外として処理をブレイクします。
現在日時からチェックデジットを生成したい場合などにも応用のできる処理です。
生年月日の入力欄は、日付ではなく数値入力コントロールにしました。日付ではない、任意の数値も入力可能です。
計算の過程を表示しています。確かめ算にご利用ください。
ソースコード公開
<form>
<label for="birthday">生年月日
<input type="date" id="birthday" oninput="getLuckyNumber(value)">
</label>
<label for="memo">途中式
<textarea id="memo" readonly></textarea>
</label>
</form>
<script>
/// <summary>
/// 1桁になるまで、各桁の数字の足し算を繰り返す
/// </summary>
/// <params name="date">日付</params>
/// <returns>1桁の数字</returns>
function getLuckyNumber(date) {
var str = String(date).replace(/[^0-9]/g, '');
var memo = str + '\r\n';
do {
var arr = str.split('');
var sum = 0;
for (let i = 0; i < arr.length; i++) {
sum += Number(arr[i]);
memo += arr[i] + ' + ';
}
str = String(sum);
memo += ' = ' + str + '\r\n';
// ぞろ目判定
if (str.length == 2) {
if (str[0] == str[1]) {
break;
}
}
} while(str.length > 1);
memo += str;
document.getElementById('memo').value = memo;
return str;
}
</script>
コメント