فون نمبر کے اسٹوریج میں غلطی کی وجہ سے لاگ ان میں ناکامی نے ایک خامی کو بے نقاب کر دیا۔ ایک صارف کا اکاؤنٹ اس لیے بلاک ہو گیا کیونکہ ڈیٹا بیس میں ایک ہی جرمن موبائل نمبر دو مختلف شکلوں میں موجود تھا—ایک قطار میں 0171 5550134 اور دوسری میں +49 171 5550134—چنانچہ سسٹم نے انہیں الگ الگ اندراجات سمجھا۔ نتیجہ یہ نکلا کہ OTP کبھی موصول نہیں ہوا، اور "send code" کا بٹن ایک جوا بن گیا۔
فون نمبر تاریخوں (dates) کے مقابلے میں زیادہ مشکل کیوں ہیں
ڈویلپرز اکثر فون نمبر کی ان پٹ کو کنٹرول کرنے کے لیے regex پر بھروسہ کرتے ہیں۔ یہ بھروسہ اس لمحے ٹوٹ جاتا ہے جب کوئی نمبر سرحد پار کرتا ہے یا کسی ملک کا نیشنل پلان تبدیل ہوتا ہے۔ تاریخیں ایک قابلِ پیش گوئی کیلنڈر کی پیروی کرتی ہیں؛ جبکہ فون نمبر کیریئرز، ریگولیشنز اور ثقافتی روایات کے ساتھ بدلتے رہتے ہیں۔
خام اسٹرنگز (raw strings) کی پوشیدہ قیمت
فون نمبر کو ایک سادہ اسٹرنگ کے طور پر محفوظ کرنا منفرد لگتا ہے—جب تک کہ دو مختلف شکلیں ایک ہی لائن کی طرف اشارہ نہ کریں۔ OTP سسٹم جو ڈیٹا بیس میں "مخصوص" نمبر تلاش کرتے ہیں، وہ کوڈ ایک ایسے ڈپلیکیٹ نمبر پر بھیج دیتے ہیں جو کبھی صارف تک نہیں پہنچتا۔
مسئلہ اس وقت مزید سنگین ہو جاتا ہے جب نمبرز کو numeric fields میں رکھا جاتا ہے۔ ایک BIGINT کالم شروع کا + اور تمام ابتدائی زیرو (zeros) کو ختم کر دیتا ہے، جس سے +49 171 5550134 تبدیل ہو کر 491715550134 بن جاتا ہے۔ پلس (+) کے نشان کے بغیر، اصل فارمیٹ کو دوبارہ ترتیب دینا محض ایک اندازہ بن کر رہ جاتا ہے۔
E.164 معاہدہ
بین الاقوامی ٹیلی فون نمبرنگ پلان، E.164، ایک واحد اور پورٹیبل نمائندگی کی وضاحت کرتا ہے:
+سے شروع ہوتا ہے- اس کے بعد 1 سے 3 ہندسوں کا کنٹری کوڈ ہوتا ہے
- پھر سبسکرائبر نمبر
- کل 15 سے زیادہ ہندسے نہیں ہونے چاہئیں
- کوئی اسپیس، ڈاٹ یا ڈیش نہیں
E.164 اس بات کی ضمانت نہیں دیتا کہ نمبر فعال (active) ہے؛ یہ صرف اس بات کی ضمانت دیتا ہے کہ اسٹرنگ ایک درست ساختی پیٹرن کی پیروی کرتی ہے۔ اسے فارمیٹ کے معاہدے کے طور پر دیکھیں، نہ کہ اس بات کی یقینی ضمانت کہ نمبر دستیاب ہے۔
عام غلطیاں جنہیں regex درست نہیں کر سکتا
- Numeric storage – BIGINT شروع کا
+اور ابتدائی زیرو کو ختم کر دیتا ہے۔ اس کے بجائے ٹیکسٹ کالم (TEXT یا VARCHAR) استعمال کریں۔ - Hard-coded regexes – نیشنل پلانز تبدیل ہوتے رہتے ہیں۔ میکسیکو نے 2019 میں اپنا ٹرنک پری فکس ختم کر دیا تھا؛ ارجنٹائن میں اب موبائل لائنوں کے لیے کنٹری کوڈ کے بعد
9کا ہونا ضروری ہے۔ ایک جامد (static) پیٹرن جلد ہی متروک ہو جاتا ہے۔ - Blind zero stripping – اطالوی لینڈ لائنز میں شروع کا زیرو برقرار رہتا ہے، جبکہ جرمن نمبرز میں نہیں رہتا۔ "تمام ابتدائی زیرو ہٹا دیں" کا ایک عمومی اصول اطالوی ڈیٹا کو خراب کر دیتا ہے جبکہ جرمن نمبروں کو متاثر نہیں کرتا۔
- Assuming format equals deliverability – libphonenumber ساخت کی تصدیق کرتا ہے لیکن یہ نہیں بتا سکتا کہ ہینڈ سیٹ آن ہے یا نمبر پورٹ کیا گیا ہے۔
ایک قابلِ اعتماد پائپ لائن بنانا
- ملک کے بارے میں پوچھیں – سائن اپ فارمز پر کنٹری سلیکٹر شامل کریں اور اس ریجن کو پارسر کو بھیجیں۔
- لائیو فارمیٹنگ دکھائیں – "AsYouType" فارمیٹنگ استعمال کریں تاکہ صارفین ٹائپ کرتے وقت درست پیٹرن دیکھ سکیں۔
- Blur پر ویلیڈیٹ کریں – ہر کی اسٹروک (keystroke) کے بجائے صارف کے فیلڈ چھوڑنے کے بعد ویلیڈیشن چلائیں؛ اس سے کام میں آسانی ہوتی ہے۔
- صرف E.164 اسٹرنگ کو محفوظ کریں – ڈیٹا بیس میں نارملائزڈ
+سے شروع ہونے والا نمبر محفوظ کریں۔ - ایج (edge) پر فارمیٹ کریں – صرف UI یا ای میل ٹیمپلیٹس میں اسے انسانی طور پر پڑھنے کے قابل لے آؤٹ میں تبدیل کریں۔
لیگیسی ڈیٹا (legacy data) کو منتقل کرتے وقت، وہ قطاریں محفوظ رکھیں جو ویلیڈیشن میں ناکام رہیں۔ ہر موجودہ اندراج کو ایک نئے کالم میں پارس کریں، ناکامیوں کو نشان زد کریں، اور ایک رپورٹ تیار کریں۔ خاموشی سے ڈیٹا کا ضیاع (silent drops) سپورٹ ٹکٹس پیدا کرتا ہے جو بعد میں مہنگے اصلاحی کاموں میں بدل جاتے ہیں۔
ڈویلپرز کے لیے ایک فوری چیک لسٹ
- نمبرز کو E.164 فارمیٹ میں TEXT/VARCHAR کے طور پر محفوظ کریں۔
- گوگل کی libphonenumber لائبریری استعمال کریں؛ یہ عالمی پلانز کی پیچیدہ حقیقتوں کو سنبھالتی ہے۔
- ان صارفین کے لیے ایک ڈیفالٹ ریجن فراہم کریں جو کنٹری کوڈ نہیں لکھتے۔
- لائیو سائن اپس کے لیے
is_valid_numberکو کال کریں؛ یہ چیک کرتا ہے کہ نمبر علاقائی قوانین کے مطابق ہے یا نہیں۔ - بلک ڈیٹا (bulk data) کی صفائی کے دوران
is_possible_numberاستعمال کریں؛ یہ مشکوک کیسز کو مسترد کیے بغیر واضح طور پر غلط اندراجات کو پکڑ لیتا ہے۔
فون نمبروں کا درست استعمال محض ایک اضافی سہولت نہیں ہے؛ بلکہ یہ کسی بھی ایسے سسٹم کے لیے ایک لازمی ضرورت ہے جو قابلِ اعتماد صارف رابطے پر انحصار کرتا ہے۔ E.164 کے مطابق نارملائز کر کے اور پارسنگ کا کام ایک آزمودہ لائبریری کے سپرد کر کے، ڈویلپرز ان بگ (bugs) کے ایک پورے گروہ کو ختم کر دیتے ہیں جو خاموشی سے اعتماد اور آمدنی کو نقصان پہنچاتے ہیں۔ فون نمبروں کو آزادانہ ٹیکسٹ کے بجائے اسٹرکچرڈ ڈیٹا کے طور پر لیں، اور معیار (standards) کو مشکل کام کرنے دیں۔
