西班牙、意大利和德国的每家酒店都必须记录谁住在客房里。三个国家要求的字段不同,期限不同,报送渠道不同,记录的保存期限也不同。为其中一国设计的入住表单,放到另外两国就是错的。

本文阅读每个国家的原始文本,把字段分成两组:一组印在住客的护照或身份证上,另一组只有住客本人才能告诉你。下面的每一项要求都引自所链接的来源。凡是来源无法完整读取的地方,都会注明缺失,而不是凭猜测补上。

这里是 doc.cheap 的博客。doc.cheap 是一款护照和身份证 OCR API,能从照片中读取护照和身份证,并在服务器端重新校验 MRZ 校验位。下文内容不依赖于它。

西班牙:Real Decreto 933/2021

西班牙的规定见于在官方公报 BOE 上发布的 Real Decreto 933/2021。合并文本显示“Última actualización, publicada el 27/10/2021”,其报送义务“a partir del 2 de enero de 2023”起适用(Disposición final tercera)。

该法令对酒店的要求:

要求 条文内容 条款
签署人 入住登记表“deberán ser firmados por toda persona mayor de catorce años” Art. 4.2
准确性 经营场所须对数据与身份证件一致负责,身份证件“que habrán de ser exhibidos o facilitados por los usuarios” Art. 4.3
记录 保存附件 I 和 II 数据的“registro informático” Art. 5.1
期限 数据须“de manera inmediata, y en todo caso en un plazo no superior a 24 horas”报送,自预订时以及“Al inicio de los servicios contratados”起算 Art. 6.3
渠道 “por procedimientos telemáticos”;非专业房东可使用其他方式 Art. 6.4
保存 “Los datos del registro informático deberán conservarse durante un plazo de tres años a contar desde la finalización del servicio o prestación contratada.” Art. 5.3

住客字段在 Anexo I 的 A.3 节“Datos de los viajeros”。按数值来源排列如下:

Anexo I A.3 字段 入住时的来源
a) Nombre 证件
b) Primer apellido 证件
c) Segundo apellido 证件(持有人有第二姓氏时)
d) Sexo 证件
e) Número de documento de identidad 证件
f) Número de soporte del documento 证件(西班牙证卡);不属于护照 MRZ 字段
g) Tipo de documento (DNI, pasaporte, TIE) 证件
h) Nacionalidad 证件
i) Fecha de nacimiento 证件
j) Lugar de residencia habitual (Dirección completa, Localidad, País) 住客
k) Teléfono fijo, l) Teléfono móvil, m) Correo electrónico 住客
n) Número de viajeros 住客或预订
o) Relación de parentesco entre los viajeros(有未成年人时) 住客

A.4 节“Datos de la transacción”补充了预订方面的信息:合同编号、日期和签名;入住和退房的日期与时间;物业地址、客房数量以及是否提供互联网;还有付款信息:付款类型、支付方式的识别信息、其持有人、银行卡有效期和付款日期。这些都不在护照上,而是来自你的预订和支付系统。

对解析程序来说有一个陷阱:护照只有一个姓氏字段。西班牙人的姓名常常有两个姓氏,而法令要求分开填写,因此表单应显示拆分结果,并允许住客修改。

德国:Bundesmeldegesetz 第 29 条和第 30 条

德国的规定见于《联邦户籍登记法》Bundesmeldegesetz(BMG)。§ 29 BMG 规定了谁必须登记:

"Beherbergte ausländische Personen haben am Tag der Ankunft einen besonderen Meldeschein handschriftlich zu unterschreiben, der die in § 30 Absatz 2 aufgeführten Daten enthält." (§ 29(2))

也就是说,按现行文本,义务落在外国住客身上,时间是抵达当天。随行的外国配偶、伴侣和未成年子女只登记人数;超过 10 人的旅行团只需领队签字。根据 § 29(3),外国住客“durch die Vorlage eines gültigen Identitätsdokumentes (anerkannter und gültiger Pass oder Passersatz)”证明身份。

登记表不必是纸质的。根据 § 29(5),经住客同意,数据可以电子方式采集,住客在抵达当天通过三种途径之一确认:采用强客户认证的银行卡支付、身份证或居留许可的电子身份功能,或在现场读取该卡的电子身份。

§ 30 BMG 规定了内容。登记表载有“ausschließlich folgende Daten”,即仅限以下数据:

§ 30(2) 字段 入住时的来源
1. Datum der Ankunft und der voraussichtlichen Abreise 住客或预订
2. Familiennamen 证件
3. Vornamen 证件
4. Geburtsdatum 证件
5. Staatsangehörigkeiten 证件;该字段是复数,因此要询问是否还有其他国籍
6. Anschrift 住客
7. Zahl der ausländischen Mitreisenden und ihre Staatsangehörigkeit 住客
8. Seriennummer des anerkannten und gültigen Passes oder Passersatzpapiers 证件

经营者还必须将登记表与身份证件核对,并注明任何不一致之处,或证件缺失、无效的情况(§ 30(2))。各州可以为旅游税和疗养税增加字段(§ 30(3))。

保存期限见 § 30(4):登记表“vom Tag der Abreise der beherbergten Person an ein Jahr”保存,之后“innerhalb von drei Monaten nach Ablauf der Aufbewahrungsfrist”销毁。电子数据适用同样的期限,经营者须应要求以机器可读格式提交给主管机关。与西班牙和意大利不同,BMG 没有规定例行报送期限:登记表留在现场保存,被要求时出示。电子处理必须符合 Reg. (EU) 2016/679(即 GDPR)第 24、25 和 32 条(§ 30(5))。

意大利:TULPS 第 109 条与 Alloggiati Web

意大利的义务来自公共安全统一法 TULPS 第 109 条,以及 2013 年 1 月 7 日和 2021 年 9 月 16 日的部长令。Normattiva 上该条的官方文本通过脚本加载,因此这里的引文取自接收数据的国家警察门户 Alloggiati Web。其首页写道:

"I gestori di esercizi alberghieri e di tutte le altre strutture ricettive, ENTRO LE 24 ORE successive all'arrivo, devono comunicare alle questure territorialmente competenti, ESCLUSIVAMENTE per il tramite del Servizio Alloggiati, le generalità delle persone alloggiate. Se il soggiorno è inferiore alle 24 ore le generalità vanno inviate all'arrivo stesso."

简而言之:在抵达后 24 小时内,只能通过 Alloggiati Web,将住客的身份信息报送给当地警察总部;住宿不足 24 小时的,在抵达时即报送。

门户的 FAQ 补充了三点:

要点 FAQ 的说法
身份 第 109 条规定“si può dare alloggio esclusivamente a persone munite di un documento idoneo ad attestarne l'identità”,并按 2013 年部长令(2021 年修订)通过 Alloggiati Web 报送
短租 第 109 条的义务延伸至不足 30 天的租赁(Decree-Law 113/2018 第 19 条之二)
回执 “Le ricevute vanno conservate per cinque anni in formato digitale.”

请注意,五年针对的是门户的回执,即你已报送数据的凭证。FAQ 对住客数据本身的保存只字未提。

确切的字段清单在 2013 年部长令的技术附件中。门户只以 PDF 文件发布它,本文无法逐字读取,因此省略了逐字段的划分。在制作意大利表单之前,请从门户自己的手册和代码表(“Manuali”和“Scarica tabelle”页面)获取清单。引文能够确认的是:报送的是住客的“generalità”,并且每位住客都需要身份证件。

三国对照

西班牙 意大利 德国
依据 Real Decreto 933/2021 TULPS 第 109 条,DM 7/01/2013(经 DM 16/09/2021 修订) BMG §§ 29, 30
登记对象 所有住客;14 岁以上者均须签字 所有住客,须持身份证件 外国住客;随行者只记人数
姓名、出生日期、国籍 是 “Generalità”(确切清单见 2013 年附件) 是
性别 是 见 2013 年附件 否
证件号码 号码,西班牙证卡另需载体号 见 2013 年附件 护照序列号
地址 常住地完整地址 见 2013 年附件 是
电话和电子邮件 是 见 2013 年附件 否
付款数据 是 引文中未提及 否
期限 24 小时 24 小时;不足 24 小时的住宿在抵达时 无报送期限;抵达当天签署登记表
渠道 电子报送 仅限 Alloggiati Web 现场保存,应要求出示
保存 服务结束后 3 年 回执 5 年 离店后 1 年,之后 3 个月内销毁

以上是对引文的解读,不构成法律意见。地方税收规定可能还会增加字段,例如德国 § 30(3) BMG 就允许这样做。

入住表单可以从证件预填什么

从表格中可以清楚看到重叠部分。在三个国家中,来自证件的字段都是同一组核心字段:名字、姓氏、出生日期、国籍、证件号码和证件类型。西班牙还要求性别。其余的,如地址、电话、电子邮件、住宿日期、随行人员和付款,则来自住客或你的预订系统。

由此得出一个简单的表单设计:

  • 用资料页的照片预填证件字段。 住客只需核对,无需输入。由于数值直接来自证件,这也满足了西班牙法令第 4.3 条的准确性义务和 § 30(2) BMG 的核对义务。
  • 使用 MRZ 校验位。 护照的机读区包含针对证件号码、出生日期和有效期的校验位。读错或输错的数字无法通过校验,因此表单可以在报送记录之前将其标出。MRZ 校验工具展示了每个校验位的计算方法。
  • 为西班牙住客显示姓氏拆分。 护照上一个姓氏字段,表单上两个。
  • 只询问该国需要的信息。 德国登记表“ausschließlich”载有 § 30(2) 的字段,所以不要把西班牙的电话和电子邮件字段搬过去。
  • 把期限纳入工作流程。 西班牙和意大利按 24 小时计算;德国按抵达当天计算。

doc.cheap 的作用

doc.cheap 通过 POST /v1/scans 每次调用读取一张图片,并以 JSON 返回证件字段:holder.given_names、holder.surname、holder.birth_date、holder.sex 和 holder.nationality,以及 document.kind、document.number、document.expiry_date 和 document.issuing_state。mrz.status 字段表示校验位是 passed 还是 failed,mrz.reason 说明哪一项未通过。识别护照指南(英文)介绍了调用方法。

下面是使用文档中的沙盒密钥映射到入住表单的示例:

const response = await fetch("https://api.doc.cheap/v1/scans", {
  method: "POST",
  headers: {
    Authorization: "Bearer sk_sandbox_public",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ image: base64Photo, reference: bookingId }),
});
const scan = await response.json();

const prefill = {
  firstName: scan.holder?.given_names,
  surname: scan.holder?.surname,
  sex: scan.holder?.sex,
  birthDate: scan.holder?.birth_date,
  nationality: scan.holder?.nationality,
  documentType: scan.document?.kind,
  documentNumber: scan.document?.number,
  documentExpiry: scan.document?.expiry_date,
  issuingState: scan.document?.issuing_state,
  mrzOk: scan.mrz?.status === "passed",
};
// 地址、电话、电子邮件、住宿日期和随行人员由住客提供。

API 只负责填写表单字段。它不会向警方、西班牙主管机关或 Alloggiati Web 发送任何内容:报送仍由你的物业管理系统完成。证件图片本身从不保存,在扫描选项中设置 retain_hours: 0 则连结果也完全不保存。

你可以使用公开的沙盒密钥无需注册账户直接试用。doc.cheap 每月包含 100 次免费识别,护照 OCR API 对比列出了其他托管服务及其公开价格。

上文所有法律表述均引自所链接的 BOE、gesetze-im-internet.de 和 Alloggiati Web 页面;所有关于 doc.cheap 的表述均已对照其代码核实。

想问问你: 你的入住流程是否服务于其中不止一个国家?对于各国不同的字段,你是怎么处理的?欢迎在下方评论区告诉我们。