@tckn/validator
Version:
TC Kimlik Numarası doğrulama paketi
49 lines (48 loc) • 2.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TCKimlikNoDogrulayici = void 0;
const soap_1 = require("soap");
class TCKimlikNoDogrulayici {
/**
* TC Kimlik numarası algoritmasını kontrol eder
* @param tcKimlikNo - TC Kimlik numarası
* @returns boolean
*/
static algoritmaDogrula(tcKimlikNo) {
if (!/^[1-9][0-9]{10}$/.test(tcKimlikNo)) {
return false;
}
const digits = tcKimlikNo.split('').map(Number);
// 1, 3, 5, 7, 9. hanelerin toplamının 7 katından, 2, 4, 6, 8. hanelerin toplamı çıkartıldığında,
// elde edilen sonucun 10'a bölümünden kalan, 10. haneyi vermelidir.
const onuncuHane = ((digits[0] + digits[2] + digits[4] + digits[6] + digits[8]) * 7
- (digits[1] + digits[3] + digits[5] + digits[7])) % 10;
// 1'den 10'uncu haneye kadar olan rakamların toplamından elde edilen sonucun
// 10'a bölümünden kalan, 11'inci haneyi vermelidir.
const onbirinciHane = digits.slice(0, 10).reduce((acc, curr) => acc + curr, 0) % 10;
return digits[9] === onuncuHane && digits[10] === onbirinciHane;
}
/**
* TC Kimlik numarasını NVI servisi üzerinden doğrular
* @param params - Doğrulama parametreleri
* @returns Promise<boolean>
*/
static async nviDogrula(params) {
try {
const client = await (0, soap_1.createClientAsync)(this.WSDL_URL);
const [result] = await client.TCKimlikNoDogrulaAsync({
TCKimlikNo: params.TCKimlikNo,
Ad: params.Ad.toLocaleUpperCase('tr-TR'),
Soyad: params.Soyad.toLocaleUpperCase('tr-TR'),
DogumYili: params.DogumYili
});
return result.TCKimlikNoDogrulaResult;
}
catch (error) {
const errorMessage = error instanceof Error ? error.message : 'Bilinmeyen bir hata oluştu';
throw new Error('TC Kimlik doğrulama servisi ile iletişim kurulamadı: ' + errorMessage);
}
}
}
exports.TCKimlikNoDogrulayici = TCKimlikNoDogrulayici;
TCKimlikNoDogrulayici.WSDL_URL = 'https://tckimlik.nvi.gov.tr/Service/KPSPublic.asmx?WSDL';