> ## Documentation Index
> Fetch the complete documentation index at: https://docs.oneclickdz.com/llms.txt
> Use this file to discover all available pages before exploring further.

# التحقق من رقم الهاتف

> تحقق من أرقام الهاتف قبل معالجة شحن الإنترنت

<div dir="rtl">
  ## نظرة عامة

  يتحقق من أرقام الهاتف لخدمات ADSL أو 4G قبل الإرسال. يساعد في منع الأخطاء وتقليل طلبات الاسترداد.

  <Tip>
    **تحقق دائماً** من أرقام الهاتف قبل إرسال طلبات الشحن لتقليل حالات الفشل.
  </Tip>

  ## معاملات الاستعلام

  <ParamField query="type" type="string" required>
    نوع الخدمة: `ADSL` أو `4G`
  </ParamField>

  <ParamField query="number" type="string" required>
    رقم الهاتف للتحقق منه - **ADSL:** `0[0-9]{8}` (مثال: `036362608`) - **4G:** `213[0-9]{9}` (مثال: `213472731602`)
  </ParamField>

  ## الاستجابة

  ### رقم ADSL صالح

  ```json theme={null}
  {
    "success": true,
    "data": {
      "ncli": "11022*****",
      "offre": "FTTc-b_10M'",
      "type": "ADSL"
    },
    "meta": {
      "timestamp": "2025-10-29T00:36:48.823Z"
    }
  }
  ```

  ### رقم 4G صالح

  ```json theme={null}
  {
    "success": true,
    "data": {
      "ncli": "11034*****",
      "type": "4GLTE"
    },
    "meta": {
      "timestamp": "2025-10-29T00:36:49.847Z"
    }
  }
  ```

  ### رقم غير صالح

  ```json theme={null}
  {
    "success": false,
    "error": {
      "code": "ERR_PHONE",
      "message": "Invalid phone number for ADSL service",
      "details": {
        "number": "123456",
        "type": "ADSL",
        "reason": "Number does not match required format"
      }
    }
  }
  ```

  ## أمثلة

  <CodeGroup>
    ```bash cURL theme={null}
    curl "https://api.oneclickdz.com/v3/internet/check-number?type=ADSL&number=036362608" \
      -H "X-Access-Token: YOUR_API_KEY"
    ```

    ```javascript Node.js theme={null}
    async function validateNumber(type, number) {
      const response = await fetch(
        `https://api.oneclickdz.com/v3/internet/check-number?type=${type}&number=${number}`,
        { headers: { "X-Access-Token": process.env.API_KEY } }
      );

      if (!response.ok) {
        const error = await response.json();
        throw new Error(error.error.message);
      }

      return await response.json();
    }

    // Usage
    try {
      await validateNumber("ADSL", "036362608");
      console.log("Number is valid");
    } catch (error) {
      console.error("Invalid number:", error.message);
    }
    ```

    ```python Python theme={null}
    def validate_number(type, number):
        response = requests.get(
            'https://api.oneclickdz.com/v3/internet/check-number',
            headers={'X-Access-Token': 'YOUR_API_KEY'},
            params={'type': type, 'number': number}
        )

        if response.ok:
            return True
        else:
            error = response.json()
            raise ValueError(error['error']['message'])

    # Usage
    try:
        validate_number('ADSL', '036362608')
        print('Valid number')
    except ValueError as e:
        print(f'Invalid: {e}')
    ```
  </CodeGroup>

  ## تنسيقات أرقام الهاتف

  <Tabs>
    <Tab title="ADSL">
      **التنسيق:** `0[0-9]{8}` **أمثلة صالحة:** - ✅ `036362608` - ✅
      `031417237` - ✅ `021123456` **أمثلة غير صالحة:** - ❌ `36362608` (يفتقد 0 في البداية) - ❌ `0363626081` (طويل جداً) - ❌ `213636362608` (تنسيق خاطئ)
    </Tab>

    <Tab title="4G">
      **التنسيق:** `213[0-9]{9}` **أمثلة صالحة:** - ✅ `213472731602` - ✅
      `213665983439` - ✅ `213778037340` **أمثلة غير صالحة:** - ❌ `0665983439`
      (تنسيق خاطئ، يجب تضمين رمز الدولة) - ❌ `665983439` (رمز الدولة مفقود) - ❌ `+213665983439` (لا يجب تضمين +)
    </Tab>
  </Tabs>

  ## مثال على التكامل

  ```javascript theme={null}
  // Complete validation flow
  async function prepareInternetTopup(type, number, value) {
    // Step 1: Validate number
    try {
      await validateNumber(type, number);
    } catch (error) {
      return {
        success: false,
        error: "Invalid phone number",
        details: error.message,
      };
    }

    // Step 2: Check product availability
    const products = await getProducts(type);
    const product = products.find((p) => p.value === value && p.available);

    if (!product) {
      return {
        success: false,
        error: "Product not available",
      };
    }

    // Step 3: Send top-up
    return await sendInternetTopup({ type, number, value });
  }
  ```

  ## لماذا نتحقق؟

  <CardGroup cols={2}>
    <Card title="تقليل الأخطاء" icon="shield-check">
      اكتشف الأرقام غير الصالحة قبل الإرسال
    </Card>

    <Card title="تجربة مستخدم أفضل" icon="smile">
      أظهر تغذية راجعة فورية للمستخدمين
    </Card>

    <Card title="أقل استرداد" icon="money-bill-wave">
      قلّل المعاملات الفاشلة والمستردة
    </Card>

    <Card title="التحقق من التنسيق" icon="list-check">
      تأكد من تطابق الرقم مع نوع الخدمة
    </Card>
  </CardGroup>

  ## أفضل الممارسات

  <AccordionGroup>
    <Accordion title="التحقق من جانب العميل">
      تحقق من التنسيق من جانب العميل أولاً، ثم أكِّد عبر API:

      ```javascript theme={null}
      function validateADSLFormat(number) {
        return /^0[0-9]{8}$/.test(number);
      }

      function validate4GFormat(number) {
        return /^213[0-9]{9}$/.test(number);
      }
      ```
    </Accordion>

    <Accordion title="عرض رسائل مفيدة">
      اعرض رسائل واضحة عند فشل التحقق: - "يرجى إدخال رقم ADSL صالح (مثال: 036362608)" - "أرقام 4G يجب أن تبدأ بـ 213 (مثال: 213665983439)" - "تنسيق الرقم: 9 أرقام تبدأ بـ 0"
    </Accordion>

    <Accordion title="تخزين نتائج التحقق مؤقتاً">
      خزِّن عمليات التحقق الناجحة لفترة قصيرة:

      ```javascript theme={null}
      const validationCache = new Map();

      async function validateWithCache(type, number) {
        const key = `${type}:${number}`;

        if (validationCache.has(key)) {
          return validationCache.get(key);
        }

        const result = await validateNumber(type, number);
        validationCache.set(key, result);

        // Clear after 5 minutes
        setTimeout(() => validationCache.delete(key), 5 * 60 * 1000);

        return result;
      }
      ```
    </Accordion>
  </AccordionGroup>

  ## الـ Endpoints المرتبطة

  <CardGroup cols={2}>
    <Card title="قائمة المنتجات" icon="list" href="/ar/api-reference/internet/list-products">
      احصل على البطاقات المتاحة
    </Card>

    <Card title="إرسال شحن" icon="paper-plane" href="/ar/api-reference/internet/send-topup">
      شراء بطاقة إنترنت
    </Card>
  </CardGroup>
</div>
