Статистика и эвристика на помощь:
Идентификатор звонящего на многих телефонах (или на всех? - я не уверен) основан на последних 6 или 7 цифрах номера. Хотя он не является универсально уникальным в качестве полностью определенного номера (включая международные и региональные коды), он имеет чрезвычайно высокую вероятность быть достаточно уникальным для контактов конкретного человека. Это классический случай, когда в теории вы можете ошибаться, но на практике вы почти никогда не ошибаетесь. Количество ошибок на практике настолько исчезающе мало, что вы даже не подозреваете о том, что они могут произойти ...
Я думаю, что вы можете использовать ту же эвристическую схему и безопасно предполагать, что в начале работы вашего приложения вероятность того, что у двух человек в вашей базе данных будут те же последние 7 цифр в их номере телефона, достаточно мала не имеет значения.
Вы можете легко контролировать свою базу данных на наличие коллизий - людей с теми же последними 7 цифрами, периодически запрашивая (я бы делал это вручную - скажем, раз в неделю, а не автоматизировал бы это прямо сейчас). Идея состоит в том, чтобы выяснить, когда ваша пользовательская база, наконец, достаточно выросла для возникновения таких коллизий. Вы хотите тратить время на решение проблемы только тогда, когда она выходит за рамки теории ...
Как только вы дойдете до этого этапа, вы можете добавить дополнительную эвристику, основанную на географии пользователей - для большинства людей большинство их контактов находятся в одной и той же стране и с одним и тем же кодом города, поэтому, если вы сомневаетесь, основываете свое решение на оригинале местонахождение пользователя на основе его собственного номера телефона. Хотя это и не полное доказательство, скорее всего, оно работает в большинстве случаев.
Другая эвристика, которую вы можете использовать, основана на социальной диаграмме - мои контакты, вероятно, будут связаны между собой. Поэтому, если номер в моем списке контактов может принадлежать двум разным лицам в вашей базе данных, проверьте, есть ли у других людей в моем списке контактов, которые уже являются вашими пользователями, тот же номер в их списке контактов, и предпочитаете человека, который более тесно связан. для меня.
Наконец, в тех немногих случаях, когда вы не уверены, вы можете либо просто ошибиться в сторону безопасности (то есть проигнорировать это число), либо, возможно, ваше приложение попросит пользователя. Для каждого пользователя это может случиться в очень редких случаях, поэтому маловероятно, что ваши пользователи разозлятся на вас за то, что они их содержат.