护照信息:
有效期根据不同护照类别是有 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
ladypxy 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 2019-07-19 10:22:54 +08:00 via iPhone
和年龄,护照类型,办理护照时的身份证有效期都有关。
|
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 2019-07-19 11:24:40 +08:00
|
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
ooxxcc 2019-07-19 11:42:13 +08:00
护照机读码(MRZ)区域使用 OCR-B 字体,OCR 做起来非常容易,然后 MRZ 的格式非常明确,可以从中分割出姓名、证件号、有效期(起止)
以上部分信息还有校验和 比让客户挨个填写要简单多了,还不容易出错 |
27
ooxxcc 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
ooxxcc 2019-07-19 11:51:00 +08:00
@AifeiI 是的,我们做的是证卡识读设备(机场用的那种),所以图片质量比较有保证,OCR 识别率没有问题。你的使用环境让客户上传就比较复杂了。
|
31
ooxxcc 2019-07-19 11:53:08 +08:00
@AifeiI
不过可以考虑一下支付宝上传身份证的过程,通过一定的交互(比如 UI 上面加个框加个头像样式)引导提升用户上传的图片的质量。 |
32
AifeiI OP @mxalbert1996 按照这个算是正确,目前就是用这个方式去应对,但没有其他资料佐证,比较没把握,所以先问问。
|
33
AifeiI OP @mxalbert1996
身份证的计算就好一些,有资料,虽然判定规则稍微比护照多一个步骤。 @ooxxcc 客户是上帝(给钱的都是大爷),提供 App 或者其他方式的交互只能作为一种途径,人工提交这一途径还是需要的。 |
34
AifeiI OP 可能有更好的计算方式,希望潜水的 dalao 分享分享😂
|