File size: 1,826 Bytes
63f6453
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/** Form doğrulayıcıları. */

function isValidEmail(email) {
  if (typeof email !== 'string') return false;
  const re = /^[^\s@]+@[^\s@]+\.[a-z]{2,}$/i;
  return re.test(email.trim());
}

/** Parola gücü: 0 (çok zayıf) - 4 (güçlü). */
function passwordStrength(pw) {
  if (typeof pw !== 'string' || pw.length === 0) return 0;
  let score = 0;
  if (pw.length >= 8) score++;
  if (/[a-z]/.test(pw) && /[A-Z]/.test(pw)) score++;
  if (/\d/.test(pw)) score++;
  if (/[^A-Za-z0-9]/.test(pw)) score++;
  if (pw.length < 6) score = Math.min(score, 1);
  return score;
}

/**
 * T.C. Kimlik No doğrulaması:
 *  - 11 hane, ilk hane 0 olamaz
 *  - 10. hane = ((tekler toplamı * 7) - çiftler toplamı) mod 10
 *  - 11. hane = ilk 10 hanenin toplamı mod 10
 */
function isValidTCKN(value) {
  const s = String(value);
  if (!/^\d{11}$/.test(s) || s[0] === '0') return false;
  const d = s.split('').map(Number);
  const odd = d[0] + d[2] + d[4] + d[6] + d[8];
  const even = d[1] + d[3] + d[5] + d[7];
  const d10 = (((odd * 7 - even) % 10) + 10) % 10;
  if (d10 !== d[9]) return false;
  const sum10 = d.slice(0, 10).reduce((a, b) => a + b, 0);
  return sum10 % 10 === d[10];
}

/** Türk cep telefonu: 05xx xxx xx xx, +90 5xx..., 5xx... biçimlerini normalize eder. */
function normalizePhone(input) {
  const digits = String(input).replace(/\D/g, '');
  let local;
  if (digits.length === 12 && digits.startsWith('90')) local = digits.slice(2);
  else if (digits.length === 11 && digits.startsWith('0')) local = digits.slice(1);
  else if (digits.length === 10) local = digits;
  else return null;
  if (local[0] !== '5') return null;
  return `+90 ${local.slice(0, 3)} ${local.slice(3, 6)} ${local.slice(6, 8)} ${local.slice(8)}`;
}

module.exports = { isValidEmail, passwordStrength, isValidTCKN, normalizePhone };