const getDateString = date => {
|
|
const year = date.getFullYear()
|
|
const month = date.getMonth() + 1
|
|
const day = date.getDate()
|
|
const hour = date.getHours()
|
|
const minute = date.getMinutes()
|
|
const second = date.getSeconds()
|
|
|
|
return [year, month, day].map(formatNumber).join('-')
|
|
}
|
|
|
|
const getTimeString = date => {
|
|
const hour = date.getHours()
|
|
const minute = date.getMinutes()
|
|
|
|
return [hour, minute].map(formatNumber).join(':')
|
|
}
|
|
|
|
const formatTime = date => {
|
|
const year = date.getFullYear()
|
|
const month = date.getMonth() + 1
|
|
const day = date.getDate()
|
|
const hour = date.getHours()
|
|
const minute = date.getMinutes()
|
|
const second = date.getSeconds()
|
|
|
|
return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
|
|
}
|
|
|
|
const formatDate = date => {
|
|
const year = date.getFullYear()%100
|
|
const month = date.getMonth() + 1
|
|
const day = date.getDate()
|
|
const hour = date.getHours()
|
|
const minute = date.getMinutes()
|
|
|
|
return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute].map(formatNumber).join(':')
|
|
}
|
|
|
|
const formatNumber = n => {
|
|
n = n.toString()
|
|
return n[1] ? n : '0' + n
|
|
}
|
|
|
|
|
|
// 显示繁忙提示
|
|
var showBusy = text => wx.showToast({
|
|
title: text,
|
|
icon: 'loading',
|
|
duration: 10000
|
|
})
|
|
|
|
// 显示成功提示
|
|
var showSuccess = text => wx.showToast({
|
|
title: text,
|
|
icon: 'success'
|
|
})
|
|
|
|
// 显示失败提示
|
|
var showModel = (title, content) => {
|
|
wx.hideToast();
|
|
|
|
wx.showModal({
|
|
title,
|
|
content: JSON.stringify(content),
|
|
showCancel: false
|
|
})
|
|
}
|
|
|
|
// ArrayBuffer转16进度字符串示例
|
|
const ab2hex = buffer => {
|
|
var hexArr = Array.prototype.map.call(
|
|
new Uint8Array(buffer),
|
|
function(bit) {
|
|
return ('00' + bit.toString(16)).slice(-2)
|
|
}
|
|
)
|
|
return hexArr.join('');
|
|
}
|
|
|
|
function isPrime(n) {
|
|
if (isNaN(n) || !isFinite(n) || n % 1 || n < 2) return false;
|
|
if (n == leastFactor(n)) return true;
|
|
return false;
|
|
}
|
|
|
|
// leastFactor(n)
|
|
// returns the smallest prime that divides n
|
|
// NaN if n is NaN or Infinity
|
|
// 0 if n=0
|
|
// 1 if n=1, n=-1, or n is not an integer
|
|
|
|
function leastFactor(n) {
|
|
if (isNaN(n) || !isFinite(n)) return NaN;
|
|
if (n == 0) return 0;
|
|
if (n % 1 || n * n < 2) return 1;
|
|
if (n % 2 == 0) return 2;
|
|
if (n % 3 == 0) return 3;
|
|
if (n % 5 == 0) return 5;
|
|
var m = Math.sqrt(n);
|
|
for (var i = 7; i <= m; i += 30) {
|
|
if (n % i == 0) return i;
|
|
if (n % (i + 4) == 0) return i + 4;
|
|
if (n % (i + 6) == 0) return i + 6;
|
|
if (n % (i + 10) == 0) return i + 10;
|
|
if (n % (i + 12) == 0) return i + 12;
|
|
if (n % (i + 16) == 0) return i + 16;
|
|
if (n % (i + 22) == 0) return i + 22;
|
|
if (n % (i + 24) == 0) return i + 24;
|
|
}
|
|
return n;
|
|
}
|
|
|
|
function randomPrime() {
|
|
//取一个8位数的随机数
|
|
var random = Math.floor(Math.random() * 90000000 + 10000000);
|
|
if (isPrime(random)) return random;
|
|
|
|
//取rondom最近的一个素数
|
|
var index = 0
|
|
var prime = 10000019;
|
|
while (true) {
|
|
index++;
|
|
|
|
if (isPrime(random + index)) {
|
|
prime = random + index;
|
|
break;
|
|
}
|
|
|
|
if (isPrime(random - index)) {
|
|
prime = random - index;
|
|
break;
|
|
}
|
|
}
|
|
return prime;
|
|
}
|
|
|
|
function randomPrime6() {
|
|
//取一个6位数的随机数
|
|
var random = Math.floor(Math.random() * 900000 + 100000);
|
|
if (isPrime(random)) return random;
|
|
|
|
//取rondom最近的一个素数
|
|
var index = 0
|
|
var prime = 100003;
|
|
while (true) {
|
|
index++;
|
|
|
|
if (isPrime(random + index)) {
|
|
prime = random + index;
|
|
break;
|
|
}
|
|
|
|
if (isPrime(random - index)) {
|
|
prime = random - index;
|
|
break;
|
|
}
|
|
}
|
|
return prime;
|
|
}
|
|
|
|
function randomN() {
|
|
//return 5
|
|
//取一个4~15之间的随机数
|
|
var random = Math.floor(Math.random() * 15 + 4);
|
|
if (isPrime(random)) return random;
|
|
|
|
//取rondom最近的一个素数
|
|
var index = 0
|
|
var prime = 3;
|
|
while (true) {
|
|
index++;
|
|
|
|
if (isPrime(random + index)) {
|
|
prime = random + index;
|
|
break;
|
|
}
|
|
|
|
if (isPrime(random - index)) {
|
|
prime = random - index;
|
|
break;
|
|
}
|
|
}
|
|
return prime;
|
|
}
|
|
|
|
// Convert a hex string to a byte array
|
|
const hexToBytes = hex => {
|
|
for (var bytes = [], c = 0; c < hex.length; c += 2)
|
|
bytes.push(parseInt(hex.substr(c, 2), 16));
|
|
return bytes;
|
|
}
|
|
|
|
// Convert a byte array to a hex string
|
|
const bytesToHex = bytes => {
|
|
for (var hex = [], i = 0; i < bytes.length; i++) {
|
|
hex.push((bytes[i] >>> 4).toString(16));
|
|
hex.push((bytes[i] & 0xF).toString(16));
|
|
}
|
|
return hex.join("");
|
|
}
|
|
|
|
const macToInt = mac => {
|
|
var macNew = mac.replace(/:/g, '').substring(4)
|
|
//console.log('macNew', macNew)
|
|
var high = parseInt(macNew.substr(0, 4), 16)
|
|
//console.log('high', high)
|
|
var low = parseInt(macNew.substr(4, 4), 16)
|
|
//console.log('low', low)
|
|
|
|
return (high << 16) | low
|
|
}
|
|
|
|
const hexToInt = hex => {
|
|
var high = parseInt(hex.substr(0, 4), 16)
|
|
//console.log('high', high)
|
|
var low = parseInt(hex.substr(4, 4), 16)
|
|
//console.log('low', low)
|
|
|
|
return (high << 16) | low
|
|
}
|
|
|
|
const getLockModel = name => {
|
|
if (name == undefined || name == null) return 0
|
|
if (name.length == 9) {
|
|
return 1
|
|
} else {
|
|
if (name.indexOf("WSL_A") == 0) {
|
|
return 1 + parseInt(name.substr(5, 6))
|
|
} else if (name.indexOf("WSL_H") == 0) {
|
|
return 10 + parseInt(name.substr(5, 6))
|
|
} else if (name.indexOf("WSL_B") == 0) {
|
|
return 21 + parseInt(name.substr(5, 6))
|
|
} else if (name.indexOf("WSL_N") == 0) {
|
|
return 30 + parseInt(name.substr(5, 6))
|
|
} else if (name.indexOf("WSL_M") == 0) {
|
|
return 40 + parseInt(name.substr(5, 6))
|
|
} else if (name.indexOf("WSL_U") == 0) {
|
|
return 50 + parseInt(name.substr(5, 6))
|
|
} else if (name.indexOf("WSL_J") == 0) {
|
|
return 60 + parseInt(name.substr(5, 6))
|
|
} else if (name.indexOf("WSL_F") == 0) {
|
|
return 70 + parseInt(name.substr(5, 6))
|
|
} else if (name.indexOf("WSL_C") == 0) {
|
|
return 80 + parseInt(name.substr(5, 6))
|
|
} else if (name.indexOf("WSL_O") == 0) {
|
|
return 90 + parseInt(name.substr(5, 6))
|
|
} else if (name.indexOf("WSL_D") == 0) {
|
|
return 100 + parseInt(name.substr(5, 6))
|
|
} else if (name.indexOf("WSJ_Q") == 0) {
|
|
return 10000 + parseInt(name.substr(5, 6))
|
|
} else {
|
|
return 0
|
|
}
|
|
}
|
|
}
|
|
|
|
const isNbLock = model => {
|
|
if (model > 30 && model <= 49) {
|
|
return true
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
|
|
const isUxLock = model => {
|
|
if (model > 30 && model <= 59) {
|
|
return true
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
|
|
const isFxLock = model => {
|
|
if (model > 70 && model <= 79) {
|
|
return true
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
|
|
const getLockType = model => {
|
|
if (model > 0 && model <= 9) {
|
|
return '蓝牙密码锁'
|
|
} else if (model > 10 && model <= 19) {
|
|
return '家庭锁系列'
|
|
} else if (model > 20 && model <= 29) {
|
|
return '酒店密码锁'
|
|
} else if (model > 30 && model <= 49 || model > 100 && model <= 109) {
|
|
return '蓝牙NB锁'
|
|
} else if (model > 50 && model <= 59 || model > 90 && model <= 99) {
|
|
return '蓝牙密码锁'
|
|
} else if (model > 60 && model <= 69) {
|
|
return '蓝牙NB机柜锁'
|
|
} else if (model > 70 && model <= 79) {
|
|
return '蓝牙指纹锁'
|
|
} else if (model > 80 && model <= 89) {
|
|
return 'NB指纹锁'
|
|
} else if (model > 10000 && model <= 10009) {
|
|
return '取电开关'
|
|
}
|
|
}
|
|
|
|
const getLockName = (mac, model) => {
|
|
var name = mac.replace(/:/g, '_').slice(mac.length - 5, mac.length)
|
|
if (model == 1) {
|
|
return `WSL_${name}`
|
|
} else if (model > 1 && model <= 9) {
|
|
return `WSL_A${model % 10-1}_${name}`
|
|
} else if (model > 20 && model <= 29) {
|
|
return `WSL_B${model % 10-1}_${name}`
|
|
} else if (model > 10 && model <= 19) {
|
|
return `WSL_H${model % 10}_${name}`
|
|
} else if (model > 30 && model <= 39) {
|
|
return `WSL_N${model % 10}_${name}`
|
|
} else if (model > 40 && model <= 49) {
|
|
return `WSL_M${model % 10}_${name}`
|
|
} else if (model > 50 && model <= 59) {
|
|
return `WSL_U${model % 10}_${name}`
|
|
} else if (model > 60 && model <= 69) {
|
|
return `WSL_J${model % 10}_${name}`
|
|
} else if (model > 70 && model <= 79) {
|
|
return `WSL_F${model % 10}_${name}`
|
|
} else if (model > 80 && model <= 89) {
|
|
return `WSL_C${model % 10}_${name}`
|
|
} else if (model > 90 && model <= 99) {
|
|
return `WSL_O${model % 10}_${name}`
|
|
} else if (model > 100 && model <= 109) {
|
|
return `WSL_D${model % 10}_${name}`
|
|
} else if (model > 10000 && model <= 10009) {
|
|
return `WSJ_Q${model % 10}_${name}`
|
|
}
|
|
}
|
|
|
|
//得到标准时区的时间的函数
|
|
function getLocalTime(i) {
|
|
//参数i为时区值数字,比如北京为东八区则输进8,西5输入-5
|
|
if (typeof i !== 'number') return;
|
|
var d = new Date();
|
|
//得到1970年一月一日到现在的秒数
|
|
var len = d.getTime();
|
|
//本地时间与GMT时间的时间偏移差
|
|
var offset = d.getTimezoneOffset() * 60000;
|
|
//得到现在的格林尼治时间
|
|
var utcTime = len + offset;
|
|
return new Date(utcTime + 3600000 * i);
|
|
}
|
|
|
|
//得到标准时区的时间的函数
|
|
function getLocalTimeByZone(d, i) {
|
|
//参数i为时区值数字,比如北京为东八区则输进8,西5输入-5
|
|
if (typeof i !== 'number') return;
|
|
//var d = new Date();
|
|
//得到1970年一月一日到现在的秒数
|
|
var len = d.getTime();
|
|
//本地时间与GMT时间的时间偏移差
|
|
var offset = d.getTimezoneOffset() * 60000;
|
|
//得到现在的格林尼治时间
|
|
var utcTime = len + offset;
|
|
return new Date(utcTime + 3600000 * i);
|
|
}
|
|
|
|
module.exports = {
|
|
getDateString,
|
|
getTimeString,
|
|
formatTime,
|
|
formatDate,
|
|
showBusy,
|
|
showSuccess,
|
|
showModel,
|
|
isPrime,
|
|
randomPrime,
|
|
randomPrime6,
|
|
randomN,
|
|
ab2hex,
|
|
bytesToHex,
|
|
hexToBytes,
|
|
macToInt,
|
|
hexToInt,
|
|
getLockModel,
|
|
getLockType,
|
|
getLockName,
|
|
isUxLock,
|
|
isNbLock,
|
|
isFxLock,
|
|
getLocalTime
|
|
}
|