假设我们有一个登录系统,要求用户提供唯一的用户ID来唯一标识他们。并且出于明显的安全原因,我们希望混淆userID以便很难猜测数字。
基本上,我们需要编写两个函数。
encode(),
解码()
第一个功能应该将我们的数字输入转换为基本的26个字母映射。第二个函数应该将字母映射转换回原始数字。
尽管这不是很实用,因为大多数散列算法都不提供来回转换,但是出于这个问题的目的,我们不考虑这一点。
例如-如果数字是31,则,
encode(31) = 'ea' and, decode('ea') = 31
为此的代码将是-
const num = 31; const encode = num => { let res = ''; const legend = 'zabcdefghijklmnopqrstuvwxy'; while(num){ const rem = num % (legend.length); res += legend[rem]; num = (Math.floor(num / legend.length)); }; return res; }; const decode = str => { let num = 0; const legend = 'zabcdefghijklmnopqrstuvwxy'; for(let i = 0; i < str.length; i++){ const ind = legend.indexOf(str[i]); num += (ind * Math.pow(legend.length, i)); }; return num; } console.log(encode(num)); console.log(decode('ea'));
输出结果
控制台中的输出将是-
ea 31