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. 在C++中,传值还是传引用?

    情况一:需要修改原对象 需要修改原对象的情况,必须要传引用.这种情况没什么要说的. 情况二:不需要修改原对象 对于内置类型(整数.浮点数.字符类型等),传值效率更高.主要有三点原因: 内存开销更小.由 ...

  2. C#设计模式19——装饰器模式的写法

    装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许你动态地给一个对象添加一些额外的职责,而不需要修改这个对象的代码. What(什么) 装饰器模式是一种结构型设计模式,它允许 ...

  3. JS引擎中的线程,事件循环,上下文

      线程 浏览器中有哪些进程呢? 1.浏览器进程:浏览器的主进程,负责浏览器的界面界面显示,与用户交互,网址栏输入.前进.后退,以及页面的创建和销毁. 2.渲染进程(浏览器内核):默认一个tab页面一 ...

  4. 自研ORM嵌套查询和子查询,强不强大您说了算。

    测试代码 var count = 0; var refAsync = new RefAsync<int>(); //下面示例方法的重载均支持 var query = db.Query< ...

  5. 全同态(Fully Homomorphic Encryption, FHE)和半同态(Partially Homomorphic Encryption, PHE)介绍

    全同态(Fully Homomorphic Encryption, FHE)和半同态(Partially Homomorphic Encryption, PHE) 全同态加密(FHE)是指一种加密方案 ...

  6. FPGA加速技术:在数据中心和云计算中的应用

    目录 1. 引言 2. 技术原理及概念 3. 实现步骤与流程 3.1 准备工作:环境配置与依赖安装 3.2 核心模块实现 3.3 集成与测试 4. 应用示例与代码实现讲解 4.1. 应用场景介绍 4. ...

  7. Docker、CICD持续集成部署、Gitlab使用、Jenkins介绍

    目录 1.Docker的基本操作 1.1镜像拉取 1.2镜像的操作 1.3容器的操作 运行容器 查看正在运行的容器 查看容器运行日志 进入到容器内部 停止容器运行 删除容器 启动容器 2.Docker ...

  8. CF1580C Train Maintenance题解

    我们以 \(\sqrt m\) 为分界点来进行平衡. 设当前在进行第 \(k\) 次操作,询问 \(i\). 对于 \(x_i + y_i \leq \sqrt m\),可以在 \(last_{x_i ...

  9. 你知道.NET的字符串在内存中是如何存储的吗?

    毫无疑问,字符串是我们使用频率最高的类型.但是如果我问大家一个问题:"一个字符串对象在内存中如何表示的?",我相信绝大部分人回答不上来.我们今天就来讨论这个问题. 一.字符串对象的 ...

  10. Flutter ncnn 使用

    Flutter 实现手机端 App,如果想利用 AI 模型添加新颖的功能,那么 ncnn 就是一种可考虑的手机端推理模型的框架. 本文即是 Flutter 上使用 ncnn 做模型推理的实践分享.有如 ...