ಫೋನ್ ಸಂಖ್ಯೆಯ ಶೇಖರಣೆಯಲ್ಲಿನ ವ್ಯತ್ಯಾಸದಿಂದಾಗಿ ಲಾಗಿನ್ ವಿಫಲವಾಗಿದ್ದು, ಒಂದು ದೋಷವನ್ನು ಬಯಲಿಗೆಳೆದಿದೆ. ಡೇಟಾಬೇಸ್ನಲ್ಲಿ ಒಂದೇ ಜರ್ಮನ್ ಮೊಬೈಲ್ ಸಂಖ್ಯೆಯನ್ನು ಎರಡು ರೂಪಗಳಲ್ಲಿ ಸಂಗ್ರಹಿಸಿದ್ದರಿಂದ (ಒಂದು ಸಾಲಿನಲ್ಲಿ 0171 5550134 ಮತ್ತು ಇನ್ನೊಂದರಲ್ಲಿ +49 171 5550134) ಬಳಕೆದಾರರ ಖಾತೆಯನ್ನು ನಿರ್ಬಂಧಿಸಲಾಯಿತು—ಹೀಗಾಗಿ ಸಿಸ್ಟಮ್ ಅವುಗಳನ್ನು ವಿಭಿನ್ನ ಎಂಟ್ರಿಗಳೆಂದು ಪರಿಗಣಿಸಿತು. ಇದರ ಪರಿಣಾಮ: OTP ಎಂದಿಗೂ ತಲುಪಲಿಲ್ಲ ಮತ್ತು "send code" ಬಟನ್ ಒಂದು ಅನಿಶ್ಚಿತತೆಯಾಗಿ ಬದಲಾಯಿತು.
ಫೋನ್ ಸಂಖ್ಯೆಗಳು ದಿನಾಂಕಗಳಿಗಿಂತ ಏಕೆ ಕಠಿಣವಾಗಿವೆ
ಫೋನ್ ಸಂಖ್ಯೆಯ ಇನ್ಪುಟ್ ಅನ್ನು ನಿಯಂತ್ರಿಸಲು ಡೆವಲಪರ್ಗಳು ಹೆಚ್ಚಾಗಿ regex ಅನ್ನು ನಂಬುತ್ತಾರೆ. ಆದರೆ ಒಂದು ಸಂಖ್ಯೆಯು ಗಡಿ ದಾಟಿದಾಗ ಅಥವಾ ರಾಷ್ಟ್ರೀಯ ಯೋಜನೆ ಬದಲಾದಾಗ ಆ ನಂಬಿಕೆ ಮುರಿದುಬೀಳುತ್ತದೆ. ದಿನಾಂಕಗಳು ಮುನ್ಸೂಚಿಸಬಹುದಾದ ಕ್ಯಾಲೆಂಡರ್ ಅನ್ನು ಅನುಸರಿಸುತ್ತವೆ; ಆದರೆ ಫೋನ್ ಸಂಖ್ಯೆಗಳು ಕ್ಯಾರಿಯರ್ಗಳು, ನಿಯಮಗಳು ಮತ್ತು ಸಾಂಸ್ಕೃತಿಕ ಪದ್ಧತಿಗಳೊಂದಿಗೆ ಬದಲಾಗುತ್ತಾ ಇರುತ್ತವೆ.
ರೊ (raw) ಸ್ಟ್ರಿಂಗ್ಗಳ ಅಡಗಿರುವ ವೆಚ್ಚ
ಫೋನ್ ಸಂಖ್ಯೆಯನ್ನು ಪ್ಲೇನ್ ಸ್ಟ್ರಿಂಗ್ ಆಗಿ ಸಂಗ್ರಹಿಸುವುದು ವಿಶಿಷ್ಟವಾಗಿ ಕಾಣಿಸಬಹುದು—ಆದರೆ ಎರಡು ರೂಪಗಳು ಒಂದೇ ಸಾಲನ್ನು ಸೂಚಿಸುವವರೆಗೆ ಮಾತ್ರ. "the" ಸಂಖ್ಯೆಗಾಗಿ ಡೇಟಾಬೇಸ್ ಅನ್ನು ಹುಡುಕುವ OTP ಸಿಸ್ಟಮ್ಗಳು, ಬಳಕೆದಾರರಿಗೆ ಎಂದಿಗೂ ತಲುಪದ ಡ್ಯೂಪ್ಲಿಕೇಟ್ ಸಂಖ್ಯೆಗೆ ಕೋಡ್ ಕಳುಹಿಸುವಂತಾಗುತ್ತದೆ.
ಸಂಖ್ಯೆಗಳು ನ್ಯೂಮರಿಕ್ ಫೀಲ್ಡ್ಗಳಲ್ಲಿ (numeric fields) ಇದ್ದಾಗ ಸಮಸ್ಯೆ ಮತ್ತಷ್ಟು ಉಲ್ಬಣಗೊಳ್ಳುತ್ತದೆ. BIGINT ಕಾಲಂ ಆರಂಭದ + ಮತ್ತು ಯಾವುದೇ ಶೂನ್ಯಗಳನ್ನು (zeros) ತೆಗೆದುಹಾಕುತ್ತದೆ, ಇದರಿಂದ +49 171 5550134 ಎಂಬುದು 491715550134 ಆಗಿ ಬದಲಾಗುತ್ತದೆ. ಪ್ಲಸ್ ಚಿಹ್ನೆ ಇಲ್ಲದೆ, ಮೂಲ ಫಾರ್ಮ್ಯಾಟ್ ಅನ್ನು ಪುನರ್ನಿರ್ಮಿಸುವುದು ಕೇವಲ ಊಹೆಯಾಗಿ ಉಳಿಯುತ್ತದೆ.
E.164 ಒಪ್ಪಂದ (contract)
ಅಂತರಾಷ್ಟ್ರೀಯ ಟೆಲಿಫೋನ್ ಸಂಖ್ಯೆ ಯೋಜನೆ, E.164, ಒಂದೇ ರೀತಿಯ, ಸುಲಭವಾಗಿ ಬಳಸಬಹುದಾದ ರೂಪವನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆ:
+ನಿಂದ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ- ನಂತರ 1 ರಿಂದ 3 ಅಂಕಿಗಳ ಕಂಟ್ರಿ ಕೋಡ್ ಇರುತ್ತದೆ
- ನಂತರ ಸಬ್ಸ್ಕ್ರೈಬರ್ ಸಂಖ್ಯೆ ಇರುತ್ತದೆ
- ಒಟ್ಟು 15 ಅಂಕಿಗಳಿಗಿಂತ ಹೆಚ್ಚು ಇರಬಾರದು
- ಯಾವುದೇ ಸ್ಪೇಸ್, ಡಾಟ್ ಅಥವಾ ಡ್ಯಾಶ್ ಇರಬಾರದು
E.164 ಸಂಖ್ಯೆಯು ಸಕ್ರಿಯವಾಗಿದೆ ಎಂದು ಖಾತರಿಪಡಿಸುವುದಿಲ್ಲ; ಅದು ಕೇವಲ ಸ್ಟ್ರಿಂಗ್ ಸರಿಯಾದ ರಚನಾತ್ಮಕ ಮಾದರಿಯನ್ನು ಅನುಸರಿಸುತ್ತದೆ ಎಂದು ಮಾತ್ರ ಖಾತರಿಪಡಿಸುತ್ತದೆ. ಇದನ್ನು ಫಾರ್ಮ್ಯಾಟ್ ಕಾಂಟ್ರಾಕ್ಟ್ ಎಂದು ಪರಿಗಣಿಸಿ, ಕನೆಕ್ಟಿವಿಟಿ ಖಾತರಿಪಡಿಸುವ ಸಾಧನವೆಂದು ಭಾವಿಸಬೇಡಿ.
regex ಸರಿಪಡಿಸಲಾಗದ ಸಾಮಾನ್ಯ ತಪ್ಪುಗಳು
- Numeric storage – BIGINT ಬಳಕೆಯಿಂದ
+ಮತ್ತು ಆರಂಭದ ಶೂನ್ಯಗಳು ಅಳಿಸಿಹೋಗುತ್ತವೆ. ಬದಲಾಗಿ ಟೆಕ್ಸ್ಟ್ ಕಾಲಂ (TEXT ಅಥವಾ VARCHAR) ಬಳಸಿ. - Hard-coded regexes – ರಾಷ್ಟ್ರೀಯ ಯೋಜನೆಗಳು ಬದಲಾಗುತ್ತವೆ. ಮೆಕ್ಸಿಕೋ 2019 ರಲ್ಲಿ ತನ್ನ ಟ್ರಂಕ್ ಪ್ರಿಫಿಕ್ಸ್ ಅನ್ನು ಕೈಬಿಟ್ಟಿತು; ಅರ್ಜೆಂಟಿನಾದಲ್ಲಿ ಈಗ ಮೊಬೈಲ್ ಲೈನ್ಗಳಿಗಾಗಿ ಕಂಟ್ರಿ ಕೋಡ್ ನಂತರ
9ಅಗತ್ಯವಿದೆ. ಸ್ಥಿರವಾದ (static) ಪ್ಯಾಟರ್ನ್ ಬೇಗನೆ ಹಳೆಯದಾಗುತ್ತದೆ. - Blind zero stripping – ಇಟಲಿಯ ಲ್ಯಾಂಡ್ಲೈನ್ಗಳು ಆರಂಭದ ಶೂನ್ಯವನ್ನು ಉಳಿಸಿಕೊಳ್ಳುತ್ತವೆ, ಆದರೆ ಜರ್ಮನ್ ಸಂಖ್ಯೆಗಳು ಹಾಗಲ್ಲ. "ಆರಂಭದ ಶೂನ್ಯಗಳನ್ನು ತೆಗೆದುಹಾಕಿ" ಎಂಬ ಸಾಮಾನ್ಯ ನಿಯಮವು ಇಟಲಿಯ ಡೇಟಾವನ್ನು ಹಾಳುಮಾಡುತ್ತದೆ, ಆದರೆ ಜರ್ಮನ್ ಸಂಖ್ಯೆಗಳ ಮೇಲೆ ಯಾವುದೇ ಪರಿಣಾಮ ಬೀರುವುದಿಲ್ಲ.
- Assuming format equals deliverability – libphonenumber ರಚನೆಯನ್ನು ಪರಿಶೀಲಿಸುತ್ತದೆ ಆದರೆ ಹ್ಯಾಂಡ್ಸೆಟ್ ಆನ್ ಆಗಿದೆಯೇ ಅಥವಾ ಸಂಖ್ಯೆಯನ್ನು ಪೋರ್ಟ್ ಮಾಡಲಾಗಿದೆಯೇ ಎಂದು ಹೇಳಲಾರದು.
ವಿಶ್ವಾಸಾರ್ಹ ಪೈಪ್ಲೈನ್ ನಿರ್ಮಿಸುವುದು
- ದೇಶವನ್ನು ಕೇಳಿ – ಸೈನ್-ಅಪ್ ಫಾರ್ಮ್ಗಳಲ್ಲಿ ಕಂಟ್ರಿ ಸೆಲೆಕ್ಟರ್ ಅನ್ನು ಸೇರಿಸಿ ಮತ್ತು ಆ ಪ್ರದೇಶವನ್ನು ಪಾರ್ಸರ್ (parser) ಗೆ ಕಳುಹಿಸಿ.
- ಲೈವ್ ಫಾರ್ಮ್ಯಾಟಿಂಗ್ ತೋರಿಸಿ – ಬಳಕೆದಾರರು ಟೈಪ್ ಮಾಡುವಾಗ ಸರಿಯಾದ ಮಾದರಿಯನ್ನು ನೋಡಲು “AsYouType” ಫಾರ್ಮ್ಯಾಟಿಂಗ್ ಬಳಸಿ.
- Validate on blur – ಪ್ರತಿ ಕೀ-ಸ್ಟ್ರೋಕ್ನಲ್ಲಿ ಬದಲಾಗಿ, ಬಳಕೆದಾರರು ಫೀಲ್ಡ್ನಿಂದ ಹೊರಬಂದ ನಂತರ ವ್ಯಾಲಿಡೇಶನ್ ಮಾಡಿ; ಇದು ಅಡೆತಡೆಗಳನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ.
- ಕೇವಲ E.164 ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಮಾತ್ರ ಉಳಿಸಿ – ನಾರ್ಮಲೈಸ್ ಮಾಡಿದ
+ಪ್ರಿಫಿಕ್ಸ್ ಹೊಂದಿರುವ ಸಂಖ್ಯೆಯನ್ನು ಡೇಟಾಬೇಸ್ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಿ. - Format at the edge – UI ಅಥವಾ ಇಮೇಲ್ ಟೆಂಪ್ಲೇಟ್ಗಳಲ್ಲಿ ಮಾತ್ರ ಮನುಷ್ಯರಿಗೆ ಸುಲಭವಾಗುವ ವಿನ್ಯಾಸಕ್ಕೆ ಪರಿವರ್ತಿಸಿ.
ಹಳೆಯ ಡೇಟಾವನ್ನು (legacy data) ಮೈಗ್ರೇಟ್ ಮಾಡುವಾಗ, ವ್ಯಾಲಿಡೇಶನ್ ವಿಫಲವಾದ ಸಾಲುಗಳನ್ನು ಉಳಿಸಿಕೊಳ್ಳಿ. ಪ್ರತಿಯೊಂದು ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಎಂಟ್ರಿಯನ್ನು ಹೊಸ ಕಾಲಂಗೆ ಪಾರ್ಸ್ ಮಾಡಿ, ವಿಫಲತೆಗಳನ್ನು ಗುರುತಿಸಿ ಮತ್ತು ವರದಿಯನ್ನು ಸಿದ್ಧಪಡಿಸಿ. ಮೌನವಾಗಿ ಡೇಟಾವನ್ನು ಕೈಬಿಡುವುದು (silent drops) ನಂತರ ದುಬಾರಿ ಸರಿಪಡಿಸುವಿಕೆಗಳಾಗಿ ಪರಿಣಮಿಸುವ ಸಪೋರ್ಟ್ ಟಿಕೆಟ್ಗಳನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ.
ಡೆವಲಪರ್ಗಳಿಗಾಗಿ ಒಂದು ಕ್ವಿಕ್ ಚೆಕ್ಲಿಸ್ಟ್
- ಸಂಖ್ಯೆಗಳನ್ನು E.164 ಫಾರ್ಮ್ಯಾಟ್ನಲ್ಲಿ TEXT/VARCHAR ಆಗಿ ಸಂಗ್ರಹಿಸಿ.
- Google ನ libphonenumber ಲೈಬ್ರರಿಯನ್ನು ಬಳಸಿ; ಇದು ಜಾಗತಿಕ ಯೋಜನೆಗಳ ಸಂಕೀರ್ಣತೆಯನ್ನು ನಿಭಾಯಿಸುತ್ತದೆ.
- ಕಂಟ್ರಿ ಕೋಡ್ ನೀಡದ ಬಳಕೆದಾರರಿಗೆ ಡಿಫಾಲ್ಟ್ ಪ್ರದೇಶವನ್ನು (default region) ಒದಗಿಸಿ.
- ಲೈವ್ ಸೈನ್-ಅಪ್ಗಳಿಗಾಗಿ
is_valid_numberಅನ್ನು ಬಳಸಿ; ಇದು ಸಂಖ್ಯೆಯು ಪ್ರಾದೇಶಿಕ ನಿಯಮಗಳಿಗೆ ಹೊಂದಿಕೆಯಾಗುತ್ತದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸುತ್ತದೆ. - ಬಲ್ಕ್ ಡೇಟಾವನ್ನು ಕ್ಲೀನ್ ಮಾಡುವಾಗ
is_possible_numberಬಳಸಿ; ಇದು ಗಡಿಬಿಡಿಯ ಪ್ರಕರಣಗಳನ್ನು ತಿರಸ್ಕರಿಸದೆ, ಸ್ಪಷ್ಟವಾಗಿ ತಪ್ಪಾದ ಎಂಟ್ರಿಗಳನ್ನು ಪತ್ತೆಹಚ್ಚುತ್ತದೆ.
ಸರಿಯಾದ ಫೋನ್ ಸಂಖ್ಯೆಯ ನಿರ್ವಹಣೆಯು ಕೇವಲ ಒಂದು ಆಯ್ಕೆಯಲ್ಲ; ಇದು ವಿಶ್ವಾಸಾರ್ಹ ಬಳಕೆದಾರ ಸಂಪರ್ಕವನ್ನು ಅವಲಂಬಿಸಿರುವ ಯಾವುದೇ ಸಿಸ್ಟಮ್ಗೆ ಒಂದು ಅಗತ್ಯ ಅವಶ್ಯಕತೆಯಾಗಿದೆ. E.164 ಗೆ ನಾರ್ಮಲೈಸ್ ಮಾಡುವ ಮೂಲಕ ಮತ್ತು ಪಾರ್ಸಿಂಗ್ ಅನ್ನು ಪರಿಣತವಾಗಿ ಪರೀಕ್ಷಿಸಲ್ಪಟ್ಟ ಲೈಬ್ರರಿಗೆ ವಹಿಸುವ ಮೂಲಕ, ಡೆವಲಪರ್ಗಳು ನಂಬಿಕೆ ಮತ್ತು ಆದಾಯವನ್ನು ಮೌನವಾಗಿ ಕುಸಿಯುವ ಬಗ್ಗಳನ್ನು ನಿರ್ಮೂಲನೆ ಮಾಡಬಹುದು. ಫೋನ್ ಸಂಖ್ಯೆಗಳನ್ನು ಮುಕ್ತ ಪಠ್ಯದ (free-form text) ಬದಲಾಗಿ ರಚನಾತ್ಮಕ ಡೇಟಾ (structured data) ಎಂದು ಪರಿಗಣಿಸಿ ಮತ್ತು ಸ್ಟ್ಯಾಂಡರ್ಡ್ಗಳ ಮೂಲಕ ಕೆಲಸವನ್ನು ಸುಲಭಗೊಳಿಸಿ.
