ROT13密碼

ROT13密碼

移位密碼:密碼中的字母會按照指定的數量來做移位。

一個常見的案例就是ROT13密碼,字母會移位13個位置。由'A' ↔ 'N', 'B' ↔ 'O',以此類推。

寫一個ROT13函數,實現輸入加密字符串,輸出解密字符串。

所有的字母都是大寫,不要轉化任何非字母形式的字符(例如:空格,標點符號),遇到這些特殊字符,跳過它們。

分析:大寫字母"A"的unicode碼為65,同理“Z”—— 90,“M”—— 77。

任何非字母形式的字符,不需要轉換,直接存入數組

後13個大寫字母,其unicode碼減去13後通過String.fromCharCode()轉換後,存入數組中

前13個大寫字母,其unicode碼加上13後通過String.fromCharCode()轉換後,存入數組中

最後將數組轉換成字符串即可

String.fromCharCode() 靜態方法根據指定的 Unicode 編碼中的序號值來返回一個字符串。

String.charCodeAt() 方法返回0到65535之間的整數,代表索引處字符的UTF-16編碼單元(在Unicode編碼單元表示一個單一的UTF-16編碼單元的情況下,UTF-16編碼單元匹配Unicode編碼單元。

function rot13(str) {
    var newarr = [];
    for (var i = 0; i < str.length; i++) {
        if (str.charCodeAt(i) < 65 || str.charCodeAt(i) > 90) {
            newarr.push(str.charAt(i));
            // 非字母形式的字符,直接跳過,存入數組newarr中
        } else if (str.charCodeAt(i) > 77) {
            newarr.push(String.fromCharCode(str.charCodeAt(i) - 13));
            // 77 —— 第13個大寫字母“M”
            // 後13個大寫字母,減去13
        } else {
            newarr.push(String.fromCharCode(str.charCodeAt(i) + 13));
            // 前13個大寫字母,加上13 
        }
    }
    return newarr.join("");
}
rot13("SERR PBQR PNZC");

發佈留言