下面我们来介绍风靡全球的凯撒密码Caesar cipher
,又叫移位密码。移位密码也就是密码中的字母会按照指定的数量来做移位。一个常见的案例就是ROT13密码,字母会移位13个位置。由‘A‘ ? ‘N‘, ‘B‘ ? ‘O‘,以此类推。
学习使用String.fromCharCode()和string.charCodeAt()注意第一个为静态方法,不能定义一个字符串然后使用他,像这样myStr.fromCharCode();是错误的,只能是String.fromCharCode(number1,number2,number3....),第一字母大写,返回的是numbers对应的Unicode字符。而string.charCodeAt(字符);正常使用,返回的是字符对应的Unicode值。对于本例字符串对应值如下:
A 65 B 66 C 67 D 68 E 69 F 70G 71 H 72 I 73 J 74 K 75 L 76 M 77 N 78 O 79 P 80Q 81 R 82 S 83 T 84 U 85 V 86 W 87 X 88 Y 89 Z 90
a 97 b 98 c 99 d 100 e 101 f 102 g 103 h 104 i 105 j 106 k 107 l 108 m 109 n 110o 111 p 112 q 113 r 114 s 115 t 116 u 117 v 118 w 119 x 120y 121 z 122 按照要求移位13位,先获取给定字符串的值,存入参数numbers for(i=0;i<str.length;i++){var numbers=str.charCodeAt(i);} 对于大写字母,小于77的对于小写字母大于96小于110的都是加13,对于大于77小于91或者大于110小于123的都是-13,而位于65以下,122以上的都是其他字符直接返回numbers即可。最后获得的是一个数组newStr,还需要使用join方法,还原成字符串。
function rot13(str) {
var newStr=[];
for(i=0;i<str.length;i++){
numbers=str.charCodeAt(i);
if(numbers<65||numbers>122){
newStr.push(String.fromCharCode(numbers));
}else if((77<numbers&&numbers<91)||numbers>110){
newStr.push(String.fromCharCode(numbers-13));
}else {
newStr.push(String.fromCharCode(numbers+13));
}
}return newStr.join("");
}