Kushindwa kwa kuingia (login) kulikotokana na kutolingana kwa uhifadhi wa namba za simu kulionyesha udhaifu fulani. Akaunti ya mtumiaji mmoja ilizuiliwa kwa sababu kanzi data (database) ilikuwa na namba ile ile ya simu ya Ujerumani katika aina mbili—0171 5550134 kwenye mstari mmoja na +49 171 5550134 kwenye mwingine—hivyo mfumo ulizichukulia kama rekodi tofauti. Matokeo yake: OTP haikufika kamwe, na kitufe cha “send code” kikawa kama kamari.
Kwa nini namba za simu ni ngumu zaidi kuliko tarehe
Watengenezaji programu mara nyingi huamini regex ili kudhibiti uingizaji wa namba za simu. Imani hiyo huvunjika mara tu namba inapovuka mpaka au mpango wa kitaifa unapobadilika. Tarehe hufuata kalenda inayotabirika; namba za simu hubadilika kulingana na kampuni za mawasiliano, kanuni, na desturi za kitamaduni.
Gharama iliyofichika ya raw strings
Kuhifadhi namba ya simu kama string ya kawaida huonekana kuwa ya kipekee—hadi wakati uwakilishi wawili unapoashiria mstari uleule. Mifumo ya OTP inayoulizia namba "husika" kwenye kanzi data huishia kutuma nambari kwenye nakala iliyojirudia ambayo haimfikii mtumiaji kamwe.
Tatizo linazidi kuwa mbaya namba zinapowekwa kwenye nyanja za nambari (numeric fields). Safu ya BIGINT huondoa alama ya + ya mwanzo na sifuri zozote za mwanzo, ikibadilisha +49 171 5550134 kuwa 491715550134. Bila alama ya jumlisha (+), kuunda upya muundo wa awali inakuwa ni kubahatisha.
Mkataba wa E.164
Mpango wa kimataifa wa namba za simu, E.164, unafafanua uwakilishi mmoja, unaohamishika:
- Huanza na
+ - Inafuatiwa na nambari ya nchi ya tarakimu 1 hadi 3
- Kisha namba ya mteja
- Isizidi tarakimu 15 kwa jumla
- Bila nafasi, nukta, au mistari (dashes)
E.164 haihakikishii kuwa namba ni hai; inahakikisha tu kuwa string inafuata muundo sahihi wa kimuundo. Ichukulie kama mkataba wa muundo, si kama mtoa habari wa uwezo wa kufika (reachability oracle).
Changamoto za kawaida ambazo regex haiwezi kutatua
- Uhifadhi wa nambari – BIGINT huondoa
+na sifuri za mwanzo. Tumia safu ya maandishi (TEXT au VARCHAR) badala yake. - Regex zilizowekwa moja kwa moja (Hard-coded) – Mipango ya kitaifa hubadilika. Mexico iliondoa kiambishi chake cha trunk mwaka 2019; Argentina sasa inahitaji
9baada ya nambari ya nchi kwa laini za simu za mkononi. Muundo tuli (static pattern) unakuwa obsolete haraka. - Kuondoa sifuri bila uangalifu – Simu za nyumbani za Italia hubaki na sifuri ya mwanzo, za Ujerumani hazibaki. Kanuni ya jumla ya “ondoa sifuri za mwanzo” huharibu data za Italia huku zikiacha namba za Ujerumani bila mabadiliko.
- Kudhania kuwa muundo unamaanisha ufikiaji – libphonenumber huhakiki muundo lakini haiwezi kusema ikiwa kifaa kiko wazi au ikiwa namba imehama (ported).
Kujenga mfumo wa kuaminika (reliable pipeline)
- Omba nchi – Ongeza chaguo la nchi kwenye fomu za usajili na upitishe eneo hilo kwa parser.
- Onyesha muundo wa moja kwa moja – Tumia muundo wa “AsYouType” ili watumiaji waone muundo sahihi wanapoandika.
- Hakiki wakati wa kuacha sehemu (on blur) – Fanya uhakiki baada ya mtumiaji kuacha sehemu hiyo badala ya kila wakati anapobofya herufi; hii inapunguza usumbufu.
- Hifadhi string ya E.164 pekee – Hifadhi namba iliyorekebishwa yenye kiambishi
+kwenye kanzi data. - Fanya muundo kwenye upande wa mtumiaji (at the edge) – Badilisha kurudi kwenye mpangilio unaoeleweka na binadamu kwenye UI au templates za barua pepe pekee.
Unapohamia data za zamani (legacy data), baki na mistari inayoshindwa uhakiki. Changanua (parse) kila ingizo lililopo kwenye safu mpya, weka alama kwenye kushindwa, na uandae ripoti. Kuondoa data kimyakimya huleta tiketi za msaada ambazo baadaye zinageuka kuwa marekebisho ya gharama kubwa.
Orodha ya haraka kwa watengenezaji
- Hifadhi namba kama TEXT/VARCHAR katika muundo wa E.164.
- Tumia maktaba ya Google ya libphonenumber; inashughulikia hali halisi ya utata wa mipango ya kimataifa.
- Toa eneo la chaguo-msingi kwa watumiaji wanaosahau nambari ya nchi.
- Ita
is_valid_numberkwa usajili wa moja kwa moja; inahakiki ikiwa namba inalingana na kanuni za kikanda. - Tumia
is_possible_numberunapofanya usafishaji wa data nyingi; inakamata ingizo ambazo zimeharibika waziwazi bila kukataa kesi zenye mashaka kidogo.
Ushughulikiaji sahihi wa namba za simu si jambo la ziada tu; ni hitaji la lazima kwa mfumo wowote unaotegemea mawasiliano ya kuaminika na mtumiaji. Kwa kurekebisha namba kuwa E.164 na kuikabidhi kazi ya kuchanganua kwa maktaba iliyothibitishwa, watengenezaji huondoa aina fulani ya hitilafu (bugs) ambazo zinaharibu uaminifu na mapato kimyakimya. Chukulia namba za simu kama data iliyopangwa, si maandishi huru, na uache viwango (standards) vifanye kazi nzito.
