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");
——FreeCodeCamp269《Caesars Cipher》