@satheshsat/angular-cpf
Version:
CPF generator and validator
56 lines • 7.43 kB
JavaScript
import { Injectable } from '@angular/core';
import * as i0 from "@angular/core";
export class CpfService {
constructor() { }
validate(cpf) {
if (!cpf)
return false;
cpf = cpf.toString().replace(/\D+/g, '');
// Valida tamanho
if (+cpf.length !== 11)
return false;
// check all char are same
if ((/^(.)\1+$/.test(cpf)))
return false;
// Calcula e confere primeiro dígito verificador
for (var i = 0, j = 10, soma = 0; i < 9; i++, j--)
soma += cpf[i] * j;
var resto = soma % 11;
if (+cpf[9] !== +(resto < 2 ? 0 : 11 - resto))
return false;
// Calcula e confere segundo dígito verificador
for (i = 0, j = 11, soma = 0; i < 10; i++, j--)
soma += cpf[i] * j;
resto = soma % 11;
return +cpf[10] === +(resto < 2 ? 0 : 11 - resto);
}
generate() {
var cpf = Math.floor(100000000 + Math.random() * 900000000);
var reverseCpf = cpf.toString().split('').reverse();
var d1 = 0, d2 = 0;
for (var i = 0; i < reverseCpf.length; i++) {
d1 += reverseCpf[i] * (2 + i);
d2 += reverseCpf[i] * (3 + i);
}
d1 = 11 - (this.mod(d1, 11));
if (d1 >= 10)
d1 = 0;
d2 += d1 * 2;
d2 = 11 - (this.mod(d2, 11));
if (d2 >= 10)
d2 = 0;
return '' + cpf + d1 + d2;
}
mod(dividendo, divisor) {
return Math.round(dividendo - (Math.floor(dividendo / divisor) * divisor));
}
}
CpfService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CpfService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
CpfService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CpfService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CpfService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: function () { return []; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BmLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jcGYvc3JjL2xpYi9jcGYuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sVUFBVTtJQUVyQixnQkFBZ0IsQ0FBQztJQUVqQixRQUFRLENBQUMsR0FBUTtRQUNmLElBQUcsQ0FBQyxHQUFHO1lBQ0gsT0FBTyxLQUFLLENBQUM7UUFFakIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXpDLGlCQUFpQjtRQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxFQUFFO1lBQ2xCLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLDBCQUEwQjtRQUMxQixJQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQixPQUFPLEtBQUssQ0FBQztRQUVqQixnREFBZ0Q7UUFDaEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQzdDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDO1lBQ3pDLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLCtDQUErQztRQUMvQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQzFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDO1FBQzVELElBQUksVUFBVSxHQUFRLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDekQsSUFBSSxFQUFFLEdBQUMsQ0FBQyxFQUFDLEVBQUUsR0FBQyxDQUFDLENBQUM7UUFDZCxLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQztZQUNsQyxFQUFFLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLEVBQUUsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUM7U0FDN0I7UUFFRCxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBRSxFQUFFLEVBQUUsRUFBRSxDQUFFLENBQUUsQ0FBQztRQUNqQyxJQUFLLEVBQUUsSUFBSSxFQUFFO1lBQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNYLEVBQUUsSUFBRSxFQUFFLEdBQUMsQ0FBQyxDQUFDO1FBRVQsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFFLElBQUksQ0FBQyxHQUFHLENBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBRSxDQUFFLENBQUM7UUFDakMsSUFBSyxFQUFFLElBQUksRUFBRTtZQUNULEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDWCxPQUFPLEVBQUUsR0FBQyxHQUFHLEdBQUMsRUFBRSxHQUFDLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsR0FBRyxDQUFFLFNBQWlCLEVBQUUsT0FBZTtRQUNuQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUUsU0FBUyxHQUFHLENBQUUsSUFBSSxDQUFDLEtBQUssQ0FBRSxTQUFTLEdBQUcsT0FBTyxDQUFFLEdBQUcsT0FBTyxDQUFFLENBQUUsQ0FBQztJQUNyRixDQUFDOzt3R0FwRFUsVUFBVTs0R0FBVixVQUFVLGNBRlQsTUFBTTs0RkFFUCxVQUFVO2tCQUh0QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ3BmU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICB2YWxpZGF0ZShjcGY6IGFueSl7XG4gICAgaWYoIWNwZilcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY3BmID0gY3BmLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxEKy9nLCAnJyk7XG5cbiAgICAvLyBWYWxpZGEgdGFtYW5ob1xuICAgIGlmICgrY3BmLmxlbmd0aCAhPT0gMTEpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyBjaGVjayBhbGwgY2hhciBhcmUgc2FtZVxuICAgIGlmKCgvXiguKVxcMSskLy50ZXN0KGNwZikpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBDYWxjdWxhIGUgY29uZmVyZSBwcmltZWlybyBkw61naXRvIHZlcmlmaWNhZG9yXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSAxMCwgc29tYSA9IDA7IGkgPCA5OyBpKyssIGotLSlcbiAgICAgICAgc29tYSArPSBjcGZbaV0gKiBqO1xuICAgIHZhciByZXN0byA9IHNvbWEgJSAxMTtcbiAgICBpZiAoK2NwZls5XSAhPT0gKyhyZXN0byA8IDIgPyAwIDogMTEgLSByZXN0bykpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyBDYWxjdWxhIGUgY29uZmVyZSBzZWd1bmRvIGTDrWdpdG8gdmVyaWZpY2Fkb3JcbiAgICBmb3IgKGkgPSAwLCBqID0gMTEsIHNvbWEgPSAwOyBpIDwgMTA7IGkrKywgai0tKVxuICAgICAgICBzb21hICs9IGNwZltpXSAqIGo7XG4gICAgcmVzdG8gPSBzb21hICUgMTE7XG4gICAgcmV0dXJuICtjcGZbMTBdID09PSArKHJlc3RvIDwgMiA/IDAgOiAxMSAtIHJlc3RvKTtcbiAgfVxuXG4gIGdlbmVyYXRlKCl7XG4gICAgICB2YXIgY3BmID0gTWF0aC5mbG9vcigxMDAwMDAwMDAgKyBNYXRoLnJhbmRvbSgpICogOTAwMDAwMDAwKTtcbiAgICAgIHZhciByZXZlcnNlQ3BmOiBhbnkgPSBjcGYudG9TdHJpbmcoKS5zcGxpdCgnJykucmV2ZXJzZSgpO1xuICAgICAgdmFyIGQxPTAsZDI9MDtcbiAgICAgIGZvcih2YXIgaT0wOyBpPHJldmVyc2VDcGYubGVuZ3RoOyBpKyspe1xuICAgICAgICAgIGQxICs9IHJldmVyc2VDcGZbaV0qKDIraSk7XG4gICAgICAgICAgZDIgKz0gcmV2ZXJzZUNwZltpXSooMytpKTtcbiAgICAgIH1cblxuICAgICAgZDEgPSAxMSAtICggdGhpcy5tb2QoIGQxLCAxMSApICk7XG4gICAgICBpZiAoIGQxID49IDEwICkgXG4gICAgICAgICAgZDEgPSAwO1xuICAgICAgZDIrPWQxKjI7XG5cbiAgICAgIGQyID0gMTEgLSAoIHRoaXMubW9kKCBkMiwgMTEgKSApO1xuICAgICAgaWYgKCBkMiA+PSAxMCApIFxuICAgICAgICAgIGQyID0gMDtcbiAgICAgIHJldHVybiAnJytjcGYrZDErZDI7XG4gIH1cblxuICBtb2QoIGRpdmlkZW5kbzogbnVtYmVyLCBkaXZpc29yOiBudW1iZXIgKSB7XG4gICAgICByZXR1cm4gTWF0aC5yb3VuZCggZGl2aWRlbmRvIC0gKCBNYXRoLmZsb29yKCBkaXZpZGVuZG8gLyBkaXZpc29yICkgKiBkaXZpc29yICkgKTtcbiAgfVxuXG59XG4iXX0=