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. ChatGPT 问答

    Win32GUI编程时,创建窗口触发消息的顺序 在Win32 GUI编程中,创建窗口并显示到屏幕上时,系统会触发一系列的消息,这些消息可以用来完成窗口的初始化和其他相关的工作.下面是创建窗口触发消息的 ...

  2. 【LeetCode滑动窗口专题#2】无重复字符的最长子串

    #1传送门 无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: s = "abcabcbb" 输出: 3 解释: 因为 ...

  3. 开源 API 网关-访问策略(二)

    在上篇文章API网关:开源 API 网关-访问策略(一) 中,我们简单演示了如何在IP维度中对请求路径设置黑白名单,以此来限制客户端请求的权限和范围. 此外,Apinto网关为客户端提供了一种统一的. ...

  4. CHAT-GPT初使用

    拿chatgpt去试验了一下,一个挺小的需求,但是前后还是更改了三次,体验就是它可以不断改进之前实现的代码,但需要提需求的人比较清楚需求内的细节,差不多类似于,我有想法,它来实现,还是可以提高不少效率 ...

  5. ARC114F Permutation Division

    题意 给定一个 \(1 \sim N\) 的排列,Alice 把它划分成 \(k\) 段,Bob 把这 \(k\) 段任意排列.Alice 想让字典序最小,Bob 想让字典序最大.请问最后的排列. 数 ...

  6. 前端Vue自定义简单实用轮播图封装组件 快速实现轮播图

    前端Vue自定义简单实用轮播图封装组件 快速实现轮播图, 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13153 效果图如下: ...

  7. sql server注入rce实践

    背景:在漏洞挖掘中,合理的利用sql注入,可以把注入转换成rce,使一个高危漏洞变成严重漏洞.在红蓝对抗中,利用注入rce,实现内网横向移动.笔者基于漏洞挖掘和红蓝对抗上遇到的sql server注入 ...

  8. golang 实现四层负载均衡

    大家好,我是蓝胖子,做开发的同学应该经常听到过负载均衡的概念,今天我们就来实现一个乞丐版的四层负载均衡,并用它对mysql进行负载均衡测试,通过本篇你可以了解到零拷贝的应用,四层负载均衡的本质以及实践 ...

  9. Hexo博客Next6.0版本主题配置(背景图片加载、侧边栏社交小图标设置、设置网站图标)

    随机背景图片加载 原理 自动更换背景是修改添加背景的css样式实现 图片来源 https://source.unsplash.com/ 修改背景样式 修改themes\next\source\css\ ...

  10. 2023ccpc大学生程序设计竞赛-zx

    这次ccpc整体来说做题做的比较卡,第一个签到都wa了,后面几道中档题全都是至少wa一次才能过,这导致我们不仅罚时增加也导致需要大量时间修改代码,还有一个G题很可惜,当时只注意到B过题多所以有点被带歪 ...