一. 数字加密
应用场合:在 url 中经常需要使用 id 值,而 id 有时候就是规律递增的整数 , 因此需要加密成无法被掌握规律的字符。
//根据密钥获取10*10的密码表,只在加密解密方法中调用
tool.codeTable = (function(keyCode) {
keyCode = keyCode.slice(5,10).concat(keyCode.slice(0,5));
var arr = [keyCode.reverse()];
for(var j=1; j<10; j++) {
var b,a;
if(j%2==0) {
a = arr[j-1].slice(0);
a.push(a.shift());
b = replace(a);
b.unshift(b.pop());
} else {
a = arr[j-1];
b = replace(a);
}
arr.push(b);
}
function replace(a) {
var b = [];
for(var i=0; i<a.length; i+=2) {
b[i] = a[i+1];
b[i+1] = a[i];
}
return b;
}
return arr;
})(["G","f","p","a","h","w","e","M","t","b"]);
/* @target 加密数字
* @param str 明文
* @return 密文
*/
tool.numEncrypt = function(str) {
str += "";
if(!/^[0-9]*$/.test(str)) {
return null;
}
var arr = str.split('');
for (var i = 0; i < arr.length; i++){
var index = Math.floor(Math.random()*10);
arr[i] = config.keyCode[index]+tool.codeTable[index][arr[i]];
}
return arr.reverse().join("");
}
/* @target 解密数字
* @param str 密文
* @return 明文
*/
tool.numDecrypt = function(str) {
if(!str) {
return null;
}
str += "";
var arr = str.split('');
var arr2 = [];
for(var i = 0; i <arr.length; i+=2) {
var index = config.keyCode.indexOf(arr[i]);
if(index < 0) {
return null;
}
var num = tool.codeTable[index].indexOf(arr[i+1]);
if(num < 0) {
return null;
}
arr2.push(num);
}
return arr2.reverse().join("");
}
二. 随机分配
应用场合:抢红包,每个人的金额需要随机,但是不能相差太悬殊或太平均
/* @target 随机分配金额
* @param money 总金额
* @param num 分配人数
* @return 明文
*/
tool.allot = function(money,num) {
//把金额单位 元转成分
money *= 100;
//金额少于人数,分配失败
money -= num;
if(money < 0) {
return null;
}
//创建数组,保证每个人至少1分钱
var arr = new Array(num);
for(var i=0; i<arr.length; i++) {
arr[i] = 1;
}
var index,count;
while(money>0) {
//把剩下金额平均再取半(不取半第一个人会拿到太多钱),再取随机数
count = Math.floor(Math.random()*money/num/2);
count = count==0? 1 : count;
//随机抽个人,把钱分给他
index = Math.floor(Math.random()*num);
arr[index] = arr[index] + count;
money -= count;
}
//把金额单位 分转成元
for(var i=0; i<arr.length; i++) {
arr[i] /= 100;
arr[i] += " ";
}
return arr;
}
三. 日期转字符串
应用场合:日期对象转指定字符串格式
/* @target 日期对象转字符串
* @example 年-月-日 时:分:秒:毫秒
* yyyy-MM-dd HH:mm:ss:SSS → 2018-08-08 08:08:08:888
* yy-M-d H:m:s → 18-8-8 8:8:8
* @param day : 目标日期
* @param split : 分隔符,不传默认.号
* @return 日期字符串
*/
tool.DateToString = function(day,format) {
var year = day.getFullYear();
var month = day.getMonth()+1;
var date = day.getDate();
var hour = day.getHours();
var hour12 = (hour>12? hour-12 : hour);
hour12 = (hour12==0? 12 : hour12);
var minute = day.getMinutes();
var second = day.getSeconds();
var milliSecond = day.getMilliseconds();
return format.replace("yyyy" , year)
.replace("yy" , new String(year).substring(2))
.replace("MM" , month<10? "0"+month : month)
.replace("M" , month)
.replace("dd" , date<10? "0"+date : date)
.replace("d" , date)
.replace("hh" , hour12<10? "0"+hour12 : hour12)
.replace("h" , hour12)
.replace("HH" , hour<10? "0"+hour : hour)
.replace("H" , hour)
.replace("mm" , minute<10? "0"+minute : minute)
.replace("m" , minute)
.replace("ss" , second<10? "0"+second : second)
.replace("s" , second)
.replace("SSS",milliSecond);
}
三. 读取JSON文件
$.getJSON("res/test.json",function(data) {
});
$.ajax({
url:"res/test.json",
type:"get",
dataType:"json",
success:function(data) {
},
error:function(data) {
}
});
四. 模板引擎
/* @target 通过jtemplate加载数据
* @param id : 被加载容器的id
* @param data : 加载的数据
*/
tool.loadData = function(id,data) {
var container = $("#"+id);
var template = container.find('script[type="text/template"]').html();
container.setTemplate(template);
container.processTemplate(data);
}
<div class="app-ul" id="notice">
<script type="text/template">
<div>{$T.title}</div>
{#foreach $T.paths as src}
<div>{$T.src}</div>
{#/for}
</script>
</div>
<script>
tool.loadData("notice",data);
</script>
Jtemplate下载地址:
https://pan.baidu.com/s/16u6NsFapo7UiMkcP3WIn3w