LUA 信用卡到期日期验证
2020-6-13 15:2:32
收藏:0
阅读:140
评论:1
我有一个应用程序收集信用卡数据。在将这些信息发送给付款实体之前,我正在尝试确保输入的信息至少是有效的。我已经解决了卡号和 cvv 号码,但是我对到期日期不是很确定。我获得信息的格式是 MMYY。所以我正在做的是:
-- 获取当前日期和时间的简单函数
function getdatetime(tz)
local tz = tz or 'America/New_York';
local luatz = require 'luatz';
local function ts2tt(ts)
return luatz.timetable.new_from_timestamp(ts);
end
local utcnow = luatz.time();
local time_zone = luatz.get_tz(tz);
local datetime_raw = tostring(ts2tt(time_zone:localise(utcnow)));
local year, month, day, hour, min, sec, time_reminder = string.match(datetime_raw, "^(%d%d%d%d)%-(%d%d)%-(%d%d)[Tt](%d%d%.?%d*):(%d%d):(%d%d)()");
return year, month, day, hour, min, sec;
end
local current_year, current_month = getdatetime() -- 获取当前年份/月份
local card_expiry_date = 'YYMM'; -- 在应用程序中,这实际上会得到一个值,例如:2204、2301、2010 等等。
local card_exp_year = string.sub(card_expiry_date , 3, 4)
local card_exp_month = string.sub(card_expiry_date , 1, 2)
-- 提取年份的最后两位数字
current_year = string.sub(current_year , 3, 4)
-- 检查月份是否有效
if(card_exp_month < '01' or card_exp_month > '12')then
print("这不是有效的月份")
else
-- 检查日期是否是这个月或之后的日期
if((card_exp_year < current_year) or (card_exp_year == current_year and card_exp_month < current_month))then
print("日期不能早于本月。")
else
print("一切都好。")
end
end
我不知道这是否是最优雅的解决方案,但它可行。然而,它有一个巨大的漏洞:在世纪末,它将失败。由于我只知道到期日期年份的最后两位数字,如果一张卡在 2102 年到期,而我们在 2099 年,我的逻辑会错误地拒绝该日期(02 小于 99)。
我非常清楚,我和我的简单应用程序可能不会继续存在,但让我很困扰的是把它留在这样的状态。
请问有人能建议一种正确的方法来进行此验证吗?
谢谢!
Wilmar
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

信用卡通常在几年内到期。根据一些快速的网络搜索,平均为3年。此外,拥有世纪卡的持有人可以安全地假定已经去世,因此他的卡账户也已经无效。
因此,当您获得了一张到2099年02月的信用卡时,只有一个合理的选项。
计算两个差值并选择较小的一个。
类似于
local expiresIn = math.min(math.abs(99-2), math.abs(99-102))。