如何识别字符串是否为iOS设备的UDID?

时间:2010-12-28 16:05:07

标签: objective-c regex cocoa udid

我正在开发一个具有后备功能的iOS Cocoa应用程序 - 如果用户没有输入某个数据,则默认使用设备的UDID。我需要在我们的服务器代码(用Ruby编写)中添加一个检查,以识别发送的值是UDID(用户的默认值)还是他们设置的自定义字符串。

似乎我的问题的正确解决方案是正则表达式。我很乐意写正则表达式,但我需要确定这个正则表达式是100%保证识别UDID。

我使用以下代码检索代码中的UDID:

[[UIDevice currentDevice] uniqueIdentifier]

在模拟器中,我得到了这个值:

6938CA7D-ECE2-53A4-B293-961A8D07AFB1

由此我可以推断我可以只搜索与模式8-4-4-4-12相匹配的一串十六进制字符。但我想确定这适用于每个UDID。

我在Apple的文档中找不到任何关于此的内容,并且想知道是否有人可以给我一个明确的答案来回答这个问题...谢谢!

3 个答案:

答案 0 :(得分:2)

你无法分辨。 Apple的documentation说:

  

设备的唯一标识符(有时缩写为唯一设备标识符的UDID)是由各种硬件标识符(例如设备序列号)组成的哈希值。

与真实iOS设备相比,iPhone模拟器为uniqueIdentifier返回不同的值。我使用的所有真正的iPhone设备都有40个十六进制字符的UDID。但最好不做任何假设。

即使存在UDID模式,如果用户输入了与该模式匹配的内容,该怎么办?

答案 1 :(得分:2)

显然,唯一有保障的方法是添加额外字段,以标记用户是否输入了预期数据。

UDID表单和算法未发布,并且不能再次检测。因此,确定可能是可能的,但它绝不是100%。

答案 2 :(得分:1)

为什么不发送另一位数据表明它是UDID?或者只使用不同的参数名称(UDID=6938...)。

然后,在您的服务器中,如果您真的想要,可以像以下一样进行测试:

# somewhere outside the controller action, maybe the top of the file
UDID_PATTERN = /\A[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}\Z/

# inside the controller action you're sending info to
udid = params[:UDID]
if udid && (udid =~ UDID_PATTERN)
  # do something with the UDID in place of the other
  # bit of info they could have provided
end