Ali273
Ali273
خواندن ۳ دقیقه·۳ سال پیش

توسعه‌دهندگان نرم‌افزار، اعداد فارسی را جدی بگیرید

تصور کنید کاربری باید در بخشی از یک فرم ثبت نام، باید کد ملی خود را وارد کند و عددِ به ظاهر معتبر ۰۱۲۳۴۵۶۷۸۹ را وارد می‌کند و هر بار با پیغام خطای آزاردهنده‌ای رو به‌رو می‌شود که: «کد ملی نامعتبر است». باز هم تلاش می‌کند، این‌بار ارقام و اعداد را بررسی می‌کند، و باز همان پیغام آزاردهنده... در آخر ممکن است چند تا لیچار بارِ سایت و نرم‌افزار کند و از قید ثبت نام بگذرد. سایت هم یک مشتری را ممکن است دست داده باشد یا برای حل این موضوع باید بخشی از توان پشتیبانیِ تلفنی یا حتی حضوری خود را برای حل این مشکل خیلی کوچک به کار گیرد.

اعتبارسنجی مقادیر ورودی کاربران، یکی از اصلی‌ترین بخش‌های توسعه‌ی نرم‌افزارهاست تا از نفوذ و عملکرد نادرست نرم‌افزارها جلوگیری شود. این ورودی‌ها می‌تواند نام، نام خانوادگی، ایمیل، شماره ملی، تاریخ تولد و... باشد و برای هر نوع از ورودی، نوع خاصی از اعتبارسنجی نیاز است. برای مثال در نام یا نام خانوادگی، درج عدد معنا ندارد و برای کد ملی درج حروف بی‌معنی است.

با گسترش روزافزون استفاده از گوشی‌های هوشمند، کاربران هم تمایل بیشتری به استفاده از گوشی‌ها دارند. چون ساده‌تر و کاربرپسندتر است. اما... برخی از صفحه کلیدهایی که در گوشی‌های هوشمند نصب شده‌اند، اعداد فارسی دارند که در اعتبارسنجی فرم‌ها دردسرهای کلافه‌کننده‌ای را برای کاربران ایجاد می‌کند.

مشکل چیست؟
وقتی که کاربران در فرم‌هایی مثل فرم ثبت نام، فرم ورود، نظرسنجی و... از اعداد فارسی استفاده می‌کنند، نرم‌افزارها مقادیر ورودی را بررسی می‌کنند که تنها عددی باشند. مشکل اینجاست که هم در بحث ذخیره‌سازی سمت پایگاه داده‌ها و هم توابعی که عددی بودن (Numerical) یک ورودی را بررسی می‌کنند، ورودی اعداد فارسی را نامعتبر در نظر می‌گیرند و به کاربران پیغام خطا می‌دهند. کاربران هم که به گمان اعداد را به درستی وارد می‌کنند، متوجه نمی‌شوند که مشکل چیست و کلافه می‌شوند.

آیا بغرنج‌تر هم می‌شود؟
بله! استفاده از فونت‌های حرفه‌ای فارسی مثل ایران‌سنس یا ایران‌یکان و... به صورت پیش‌فرض هر عدد ورودی را به صورت فارسی نمایش می‌دهند و کاربران حتی عددی مثل 5 را وارد کنند، آن‌را به صورت ۵ می‌بینند. پس کاربر اساساً ممکن است دچار سردرگمی شود که ورودی فارسی است یا خیر.

اعداد فارسی چیست؟
اعداد، هم به فارسی و هم به انگلیسی یا حتی عربی ممکن است نوشته شوند. در صفحه کلیدهای گوشی‌های هوشمند (و برخی از کامپیوترها) از اعداد فارسی پشتیبان می‌شود و ممکن است کاربران در حالی که فرم‌های سایت‌ها را پر می‌کنند، از همین اعداد فارسی استفاده کنند.

1 -> ۱
2 -> ۲
3 -> ۳
4 -> ۴
5 -> ۵ (فارسی)
5 -> ٥ (عربی)
6 -> ۶ (فارسی)
6 -> ٦ (عربی)
7 -> ۷
8 -> ۸
9 -> ۹
0 -> ۰

راهکار چیست؟

در بخش قبلی، فهرست اعداد نامعتبر از نظر سیستم‌های ذخیره‌سازی و الگوریتم‌های ارزیابی عددی بودن مقادیر نوشته شده است. راهکار این است که پیش از هر بررسی، می‌بایست اعداد غیرانگلیسی را به انگلیسی تبدیل کرد و سپس نسبت به اعتبارسنجی مقادیر اقدام کرد. در برخی موارد که این اعداد می‌بایست ذخیره شوند یا پردازشی روی آن‌ها انجام شود، اعداد تبدیل شده‌ی انگلیسی می‌بایست همچنان مورد استفاده قرار گیرند.

بنابراین با طراحی یک الگوریتم ساده برای تبدیل اعداد غیرمجاز به مجاز، می‌توان از پیغام‌های آزاردهنده جلوگیری کرد.

چه ورودی‌هایی را باید بررسی کرد؟
هر نوع ورودی که احتمال می‌دهید ممکن است کاربر بخواهد در آن از اعداد استفاده کند، می‌بایست از الگوریتم پاک‌سازی استفاده کند. فهرست زیر برخی از این نمونه‌ها را نشان می‌دهد:

  • کد ملی
  • شماره شناسنامه
  • تاریخ تولد
  • شماره موبایل
  • شماره تلفن
  • کپچا (CAPTCHA)
  • کدهای اعتبارسنجی (مثل کد اعتبارسنجی احراز هویت دو مرحله‌ای)
  • مرتب‌سازی رکوردها (تعداد رکورد)
  • و...

آیا راهکار قطعی است؟
خیر! راهکار فوق می‌تواند از طیفی از خطاهای غیرواقعی جلوگیری کند؛ اما هنگامی که کاربران در برخی ورودی‌ها مانند گذرواژه از اعداد فارسی (به صورت ناخودآگاه) استفاده کنند، عملاً راهکاری برای کنترل وجود ندارد؛ چرا که نمی‌توان تفکیک دقیقی از موارد ورودی قطعی نسبت به موارد ناخودآگاه داشت.

برنامه‌نویسیتوسعه‌دهندگاناعدادنرم‌افزار
شاید از این پست‌ها خوشتان بیاید