护照信息:
有效期根据不同护照类别是有 5 年或 10 年的这两个时长,而从看到过的护照来分析,有效期期限是在签发日期上加上有效时长后减一天,例如:
时长:10 年 签发:2019/01/20 有效:2029/01/19
但是昨天看到一个特别的例子:
时长:5 年 签发:2019/02/28 有效:2024/02/28
出现这个情况后,就在网上搜索公开的资料,但是没有看到相关的信息,有朋友知道这个有效期的期限是如何计算的?
问题重点是在得知 有效时长
和 签发日期
的前提下,计算出 有效期
目前使用的公式:
有效期 = 起始日期 + (年限 * 365 + (年限 % 4))
之前提供的公式是不完整的,还是更新一下正确的校验思路,以免其他要走这路的同学跳坑里出不来
公式核心思路是计算出横跨的年份一共有几个闰年,而目前新的验证方式是需要判断这几个闰年中,有多少个是包含2月29日这一天的。
以原有的例子:
时长:5 年 签发:2019/02/28 有效:2024/02/28 闰年计数 = 签发日期 至 有效期 中年份为闰年的总数
按照签证日期的月日是大于 2月29日
(A)还是小于等于(B),分 A 和 B ,两个区间,且有以下两个条件:
yyyy/MM/dd 00:00:00
,有效期完整的时间为: yyyy/MM/dd 24:00:00
Kotlin 代码片段:https://gist.github.com/AifeiI/639e96017f60394e19355e8fa538a3f7
![]() | 1 netlous 2019-07-19 09:13:41 +08:00 via iPhone 无所谓吧,护照少于 6 个月基本就不怎么有用了,研究的这么细难道你想搞事情? |
![]() | 2 z42514 2019-07-19 09:13:49 +08:00 闰年加了一天? |
![]() | 3 psychoo 2019-07-19 09:15:16 +08:00 如果能再找到一个有效期在闰年 2 月的例子就清楚了 |
4 Dragonish3600 2019-07-19 09:16:23 +08:00 我护照到期日是 2 月 29。。。 |
5 9151 2019-07-19 09:16:48 +08:00 可能是年龄小就标 5 年? |
![]() | 7 yueqiuge 2019-07-19 09:17:52 +08:00 你想干什么 |
8 Sweden 2019-07-19 09:21:18 +08:00 via Android 十六岁以下的时候办护照就是五年 曾经我的就是这样 |
9 AifeiI OP 是一个旅游签证的系统,需要对护照信息做核验(其实填错自己护照信息的人是不少的.....),然后遇到了这么一个例子,过不了机器核验(最后走了人工核验)。 @ladypxy #4 你的签发日期是 3 月 1 日? |
![]() | 10 abc635073826 2019-07-19 09:58:23 +08:00 想起了堪比学生证的护照照片将伴随我十年 |
![]() | 11 rshun 2019-07-19 09:58:41 +08:00 应该和身份证一样吧,根据年龄来,年龄越小,有效期越短,年龄越大,有效期越长,我猜测哦 |
![]() | 12 TimePPT PRO 和年龄,护照类型,办理护照时的身份证有效期都有关。 |
![]() | 13 prondtoo 2019-07-19 10:38:55 +08:00 你问的是什么护照?因私还是因公还是外交护照? |
![]() | 14 jfdnet 2019-07-19 11:01:18 +08:00 洋洋洒洒一大段 竟然不知道楼主想要问什么 我要重新回去学语文了 |
15 AifeiI OP |
![]() | 17 TimePPT PRO |
18 MonoLogueChi 2019-07-19 11:25:47 +08:00 via Android 你需要再找一个签发是 2 月非 28 日,有效结束是闰年。一个签发日期是 2 月 28 日,有效结束是非闰年。 我猜是 1 月 20 日先算到 2029 年的 2 月,然后再减去 1 月没过完的那几天。当结束年份是闰年 2 月的时候,因为有 29 天,所以会比其他情况多一天 |
20 AifeiI OP @MonoLogueChi 这个信息是属于个人隐私,不是谁想要就能找到,所以只能找有没有官方的产生规则说明,可惜我目前没找到。 |
![]() | 21 mxalbert1996 2019-07-19 11:37:00 +08:00 via Android 10 年=3652 天 5 年=1826 天 没什么问题 |
22 loveour 2019-07-19 11:38:21 +08:00 这个感觉触及到了知识盲点。不知道有没有人知道的? |
24 zk8802 2019-07-19 11:39:26 +08:00 从手头能找到的样例出发,可以得到一个可行的公式:N == 5: 签发日期 + 365 * N + 1; N == 10: 签发日期 + 365 * N + 2。 具体是不是如此就不清楚了。 |
25 zk8802 2019-07-19 11:40:10 +08:00 后面的 +1/+2 是 5 年 /10 年里面因为闰年而增加的天数。 |
![]() | 26 47jm9ozp 2019-07-19 11:42:13 +08:00 护照机读码(MRZ)区域使用 OCR-B 字体,OCR 做起来非常容易,然后 MRZ 的格式非常明确,可以从中分割出姓名、证件号、有效期(起止) 以上部分信息还有校验和 比让客户挨个填写要简单多了,还不容易出错 |
![]() | 27 47jm9ozp 2019-07-19 11:43:11 +08:00 上文 有效期(起止)应当改为 生日+有效期限 |
![]() | 28 mxalbert1996 2019-07-19 11:43:41 +08:00 via Android 楼上说的没错,再补充一下,以五年为例,因为只多加一天,所以在这五年期间有两个 2 月 29 日的情况下(也是大多数情况)就会看起来是日期减了一天,十年同理。 |
29 AifeiI OP @ooxxcc OCR 是有清晰度要求,以及不是 100%准确(实际你得到的照片还会以各种姿态出现,所以 OCR 只能应付正常情况) |
![]() | 30 47jm9ozp 2019-07-19 11:51:00 +08:00 @AifeiI 是的,我们做的是证卡识读设备(机场用的那种),所以图片质量比较有保证,OCR 识别率没有问题。你的使用环境让客户上传就比较复杂了。 |
![]() | 31 47jm9ozp 2019-07-19 11:53:08 +08:00 @AifeiI 不过可以考虑一下支付宝上传身份证的过程,通过一定的交互(比如 UI 上面加个框加个头像样式)引导提升用户上传的图片的质量。 |
32 AifeiI OP @mxalbert1996 按照这个算是正确,目前就是用这个方式去应对,但没有其他资料佐证,比较没把握,所以先问问。 |
33 AifeiI OP @mxalbert1996 身份证的计算就好一些,有资料,虽然判定规则稍微比护照多一个步骤。 @ooxxcc 客户是上帝(给钱的都是大爷),提供 App 或者其他方式的交互只能作为一种途径,人工提交这一途径还是需要的。 |
34 AifeiI OP 可能有更好的计算方式,希望潜水的 dalao 分享分享 |