table.unpack遇到的问题

做了个中转的服务, socket+json 传递数据,

通过 {...} 封装不定参数然后 json.encode 传递到其他服务器,

然后其他服务器 json.decode之后再通过 table.unpack 解出之前 {...} 里面的参数,

如果这里是 table 还好,如果这里面是 n 个整型数据的话,后面会多了个 .0

例如, 1 会被转成 1.0,这会带来一些麻烦。

调查了许久,发现不是 json 导致的,而是在 table.unpack 导致的,

所以根据网上找到的方法,重写了一个 unpack 的方法以及一个判断数组的方法,如下:


function util.unpack(t,i)
i = i or 1
if t[i] ~= nil then
if type(t[i]) == "number" and t[i]%1 == 0 then
t[i] = t[i] >> 0
end
return t[i],util.unpack(t,i+1)
end
end --检查是否是数组类型
function util.checkArray(a)
if type(a) ~= "table" then return false end
local count = 0
for k,v in pairs(a) do
if type(k) ~= "number" then return false end
count = count + 1
end for i=1,count do
if not a[i] and type(a[i]) ~= "nil" then return false end
end return true
end

身份证检测



local CITIES = {
[11]="北京",[12]="天津",[13]="河北",[14]="山西",[15]="内蒙古",[21]="辽宁",[22]="吉林",[23]="黑龙江",[31]="上海",
[32]="江苏",[33]="浙江",[34]="安徽",[35]="福建",[36]="江西",[37]="山东",[41]="河南",[42]="湖北",[43]="湖南",[44]="广东",
[45]="广西",[46]="海南",[50]="重庆",[51]="四川",[52]="贵州",[53]="云南",[54]="西藏",[61]="陕西",[62]="甘肃",[63]="青海",
[64]="宁夏",[65]="新疆",[71]="台湾",[81]="香港",[82]="澳门",[91]="国外"}
local WIEGHTS = {
[1]=7,[2]=9,[3]=10,[4]=5,[5]=8,[6]=4,[7]=2,[8]=1,[9]=6,[10]=3,[11]=7,[12]=9,[13]=10,[14]=5,[15]=8,[16]=4,[17]=2
}
local MOD = {
'1','0','a','9','8','7','6','5','4','3','2'
}
local function checkID(sId)
local iSum=0
local info=""
local index = 1
local result
for a in string.gmatch( sId,"%d+" ) do
-- print(index, a)
result = a
index = index + 1
end
-- print("index ",index)
if index > 2 then return false,"[1]格式非法" end
if #result < 17 then return false, "[2]格式非法" end
if #result == 17 and sId:sub(18,18) ~= "x" then return false, "[3]格式非法" end
sId = sId:lower(sId)
sId = string.gsub(sId,"x","a") if CITIES[tonumber( string.sub( sId,1,2 ) )] == nil then
return false,"非法地区"
end
local bYear = tonumber(string.sub(sId,7,10))
local bMonth = tonumber(string.sub(sId,11,12))
local bDay = tonumber(string.sub(sId,13,14)) if bMonth <= 0 or bMonth > 12 then return false, "[4]格式非法" end
if bDay <= 0 or bDay > 31 then return false, "[5]格式非法" end local sBirthday = os.date("*t", os.time{year=bYear,month=bMonth,day=bDay})
local sToday = os.date("*t", os.time())
local age = sToday.year-sBirthday.year
if age < 0 or age > 100 then return false, "[6]格式非法" end for i = 1,17 do
iSum = iSum + tonumber(sId:sub(i,i))*WIEGHTS[i]
end
local verifycode = sId:sub(18,18)
local modecode = MOD[iSum%11 + 1]
-- print(iSum,iSum%11+1,verifycode,modecode)
if modecode ~= verifycode then return false,"[7]格式非法" end return true
end

手机号检测


string.match(phoneno,"[1][3,4,5,7,8,9]%d%d%d%d%d%d%d%d%d") ~= phoneno

LUA的一些工具备份的更多相关文章

  1. Lua包管理工具Luarocks详解 - 15134559390的个人空间 - 开源中国社区

    Lua包管理工具Luarocks详解 - 15134559390的个人空间 - 开源中国社区 Lua包管理工具Luarocks详解

  2. Lua内存分析工具

    最近给公司写了一个lua内存分析工具,可以非常方便的分析出Lua内存泄露问题,有图形化界面操作,方便手机端上传快照等功能 内存分析我是在c语言端写的,也有人写过lua端的分析工具,也蛮好用的,不过lu ...

  3. MySQL/MariaDB数据库的mysqldump工具备份还原实战

    MySQL/MariaDB数据库的mysqldump工具备份还原实战 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.mysqldump概述 1>.逻辑备份工具 mysq ...

  4. lua UT测试工具

    luaunit Luaunit is a unit-testing framework for Lua, in the spirit of many others unit-testing frame ...

  5. MongoDB,客户端工具备份数据库

    本篇介绍下如何利用客户端工具来进行远程服务器的数据备份到本地. 以客户端工具MongoVUE为例来进行讲解: 1.首先要连接本地服务器以及远程服务器数据库 2.在本地服务器(127.0.0.1)中,右 ...

  6. MongoDB学习(四)客户端工具备份数据库

    在上一篇MongoDB学习(三)中讲解了如何在服务器端进行数据的导入导出与备份恢复,本篇介绍下如何利用客户端工具来进行远程服务器的数据备份到本地. 以客户端工具MongoVUE为例来进行讲解: 1.首 ...

  7. 老毛桃pe装机工具备份系统

    电脑故障可以说是难以避免的,误操作或者修改了哪个设置系统就莫名其妙崩溃了.这在日常使用当中并不鲜见,许多用户就会寻求备份系统方法.有没有好的一键备份系统教程可以参考呢?在本篇教程中,就容我跟大家讲讲怎 ...

  8. 【Lua】LDoc生成Lua文档工具的使用

    参考资料: http://my.oschina.net/wangxuanyihaha/blog/188909   LDoc介绍:     LDoc是一个Lua的文档生成工具,过去,比较常用的Lua生成 ...

  9. lua调试的工具选择

    近期看到一个关于vs的lua调试插件, 装了vs2012试了下, 忍不住发此文总结下lua各种调试工具 Decoda 这是现今地球上调试lua5.1最方便的工具, 没有之中的一个. 强大的注入式调试, ...

  10. Navicat工具备份还原mysql数据库详细图解

    Navicat是个很不错的MYSQL数据库管理工具,我们常用的还web形式的phpmyadmin和font这三种了,都是非常不错的mysql管理工具.因为Navicat工具兼容性比较好,操作也比较简单 ...

随机推荐

  1. Abstract Factory Pattern 抽象工厂模式简介与 C# 示例【创建型】【设计模式来了】

    〇.简介 1.什么是抽象工厂模式? 一句话解释:   通过对抽象类和抽象工厂的一组实现,独立出一系列新的操作,客户端无需了解其逻辑直接访问. 抽象工厂模式(Abstract Factory Patte ...

  2. Helm实战案例二:在Kubernetes(k8s)上使用helm安装部署日志管理系统EFK

    目录 一.系统环境 二.前言 三.日志管理系统EFK简介 四.helm安装EFK 4.1 helm在线安装EFK 4.2 helm离线安装EFK(推荐) 五.访问kibana 5.1 数据分片 六.卸 ...

  3. 第一章 : Linux入门

    1. 概述 ‍ ​​ ‍ 2. Linux 和 Windows 区别 ‍ ​​ ‍ 3. Centos 下载地址 ‍ 网易镜像:http://mirrors.163.com/centos/7/isos ...

  4. 怎么让英文大预言模型支持中文?(一)构建自己的tokenization

    代码地址:https://github.com/taishan1994/sentencepiece_chinese_bpe Part1前言 目前,大语言模型呈爆发式的增长,其中,基于llama家族的模 ...

  5. 深入浅出synchronized的原理与源码

    深入浅出synchronized的原理与源码 1.java对象头关于锁的标识 1.对象头 // 32 bits: // -------- // hash:25 ------------>| ag ...

  6. 聊一聊Java中的Steam流

    1 引言 在我们的日常编程任务中,对于集合的制造和处理是必不可少的.当我们需要对于集合进行分组或查找的操作时,需要用迭代器对于集合进行操作,而当我们需要处理的数据量很大的时候,为了提高性能,就需要使用 ...

  7. vue3中父组件与组件之间参数传递,使用(defineProps/defineEmits),涉及属性传递,对象传递,数组传递,以及事件传递

    Vue3 中子父组件之间的通信 一.父组件传递参数到子组件 采用defineProps 传递属性 父组件: <template> <div> <h1>这是父组件&l ...

  8. 2023-07-11:给定正整数 n, 返回在 [1, n] 范围内具有 至少 1 位 重复数字的正整数的个数。 输入:n = 100。 输出:10。

    2023-07-11:给定正整数 n, 返回在 [1, n] 范围内具有 至少 1 位 重复数字的正整数的个数. 输入:n = 100. 输出:10. 答案2023-07-11: 函数的主要思路如下: ...

  9. Atcoder ABC244E - King Bombee 题解

    原题: Atcoder ABC244E - King Bombee 题意 给你一张图,从 \(S\) 到 \(T\),经过 \(k\) 条边, 经过 \(X\) 号点偶数次的方案数. 做法 设 \(f ...

  10. 【转载】Linux虚拟化KVM-Qemu分析(九)之virtio设备

    原文信息 作者:LoyenWang 出处:https://www.cnblogs.com/LoyenWang/ 公众号:LoyenWang 版权:本文版权归作者和博客园共有 转载:欢迎转载,但未经作者 ...