4

Passbook for iOS 使用一个序列号,您的服务器可以使用该序列号来识别特定的通行证。

有谁知道存折序列号中哪些字符是有效的?我知道数字和字母是有效的,但符号/标点符号也有效(例如“-”和“.”)?

另外,序列号的最大长度是多少?

谢谢你。

4

1 回答 1

7

几乎可以使用任何字符,包括“-”和“.”,只要序列保持唯一即可。特殊字符,如 '\' 需要正确转义,尽管它们可能与您的数据库不兼容,或者如果在代码的其他地方没有正确处理,可能会导致其他问题。

我刚刚尝试使用以下序列号通过,它添加到 Passbook 没有任何问题。

"serialNumber":"[]{}-_)(*&^%$#@!`~+=|\\\/?.><,:;"

UTF8 编码的字符也可以:

"serialNumber":"\u9127\u6a02\u611a" // Chinese characters 鄧樂愚

至于最大长度,我不知道有任何限制,尽管实验起来很简单。

这一系列 400 个字符也摄取 ok。

"serialNumber":"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"

我建议不要对序列使用任何类型的用户输入,因为这可能会导致非唯一冲突并使您面临注入攻击。此外,如果您更改架构(比如 AWS DynamoDB 等 Web 服务解决方案),为了避免任何问题,遵守 XML 标准也不是一个坏习惯。Base64 编码您的序列将确保广泛的兼容性。

序列号也可用于在 pass 中存储元数据。

"serialNumber":"UniqueID|data1|data2|data3|etc."
于 2013-01-18T01:13:49.757 回答