Merge pull request #1 from turbometalskater/feature/nodejs-support

Add nodejs support
This commit is contained in:
Luca Adalberto Vandro 2017-03-11 14:54:50 +01:00 committed by GitHub
commit e588cc07c7
12 changed files with 35267 additions and 32758 deletions

2
.gitignore vendored
View File

@ -31,4 +31,4 @@ node_modules
# Optional REPL history
.node_repl_history
.DS_Store
.DS_Store

View File

@ -1,15 +0,0 @@
var gulp = require('gulp');
var uglify = require('gulp-uglify');
var rename = require("gulp-rename");
gulp.task('compress', function() {
return gulp.src('codice.fiscale.js')
.pipe(uglify())
.pipe(rename('codice.fiscale.min.js'))
.pipe(gulp.dest('.'));
});
gulp.task('default', ['compress'], function() {
// place code for your default task here
});

View File

@ -1,9 +1,10 @@
{
"name": "codice-fiscale-js",
"description": "Calcolo del codice fiscale",
"main": "codice.fiscale.js",
"main": "dist/codice.fiscale.js",
"authors": [
"Luca Vandro"
"Luca Vandro",
"Walter Barbagallo"
],
"license": "MIT",
"keywords": [
@ -18,6 +19,7 @@
"moduleType": [],
"ignore": [
"**/.*",
"lib",
"node_modules",
"bower_components",
"test",

File diff suppressed because it is too large Load Diff

1
dist/codice.fiscale.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -15,7 +15,7 @@ module.exports = function(config) {
// list of files / patterns to load in the browser
files: [
'codice.fiscale.js',
'dist/codice.fiscale.js',
'tests/specs.js',
],

32612
lib/catastal-codes.json Normal file

File diff suppressed because it is too large Load Diff

127
lib/codice.fiscale.js Normal file
View File

@ -0,0 +1,127 @@
const catastalCodes = require('./catastal-codes.json')
var CodiceFiscale={}
CodiceFiscale.compute=function(name,surname,gender,day,month,year,birthplace, birthplace_provincia){
var code=
this.surnameCode(surname)+
this.nameCode(name)+
this.dateCode(day,month,year,gender)+
this.findComuneCode(birthplace, birthplace_provincia);
code+=this.getCheckCode(code);
return code;
}
CodiceFiscale.check = function(codiceFiscale){
if(codiceFiscale.length !== 16) return false;
var expectedCheckCode = codiceFiscale.charAt(15);
var cf = codiceFiscale.slice(0,15);
return CodiceFiscale.getCheckCode(cf) == expectedCheckCode;
}
CodiceFiscale.getCheckCode=function(codiceFiscale){
var val=0;
for(var i=0; i<15 ;i++){
var c=codiceFiscale[i];
val+= i%2 ? this.CHECK_CODE_EVEN[c] : this.CHECK_CODE_ODD[c];
}
val=val%26;
return this.CHECK_CODE_CHARS.charAt(val);
}
CodiceFiscale.estraiConsonanti=function(str){
return str.replace(/[^BCDFGHJKLMNPQRSTVWXYZ]/gi,'');
}
CodiceFiscale.estraiVocali=function(str){
return str.replace(/[^AEIOU]/gi,'');
}
CodiceFiscale.surnameCode=function(surname){
var code_surname = this.estraiConsonanti(surname) + this.estraiVocali(surname) + 'XXX';
return code_surname.substr(0,3).toUpperCase();
}
CodiceFiscale.nameCode=function(name){
var codNome = this.estraiConsonanti(name);
if(codNome.length>=4){
codNome= codNome.charAt(0) + codNome.charAt(2) + codNome.charAt(3);
}else{
codNome+= this.estraiVocali(name) + 'XXX';
codNome=codNome.substr(0,3);
}
return codNome.toUpperCase();
}
CodiceFiscale.dateCode=function(gg,mm,aa,gender){
var date=new Date();
date.setYear(aa);
date.setMonth(mm-1);
date.setDate(gg);
// Padding year
var year="0"+date.getFullYear();
year=year.substr(year.length-2,2);
var month=this.MONTH_CODES[date.getMonth()];
var day=date.getDate();
if(gender.toUpperCase()=='F') day+=40;
// Padding day
day="0"+day;
day=day.substr(day.length-2,2);
return String(year+month+day);
}
CodiceFiscale.findComuneCode=function(birthplace, birthplace_provincia){
for (var i = this.CODICI_CATASTALI[birthplace_provincia].length - 1; i >= 0; i--) {
var comune = this.CODICI_CATASTALI[birthplace_provincia][i];
if(comune[0] == birthplace.trim().toUpperCase()) return comune[1];
}
throw Error("Comune not found");
}
CodiceFiscale.getOmocodie = function(code){
var results = [];
var lastOmocode = code = code.slice(0,15);
for (var i = code.length - 1; i >= 0; i--) {
var char = code[i];
if(char.match(/\d/)){
lastOmocode = lastOmocode.substr(0,i) + this.OMOCODIA_TABLE[char] + lastOmocode.substr(i+1);
results.push(lastOmocode + this.getCheckCode(lastOmocode));
}
}
return results;
}
CodiceFiscale.MONTH_CODES = ['A','B','C','D','E','H','L','M','P','R','S','T'];
CodiceFiscale.CHECK_CODE_ODD = {
0:1, 1:0, 2:5, 3:7, 4:9, 5:13, 6:15, 7:17, 8:19,
9:21, A:1, B:0, C:5, D:7, E:9, F:13, G:15, H:17,
I:19, J:21, K:2, L:4, M:18, N:20, O:11, P:3, Q:6,
R:8, S:12, T:14, U:16, V:10, W:22, X:25, Y:24, Z:23
};
CodiceFiscale.CHECK_CODE_EVEN = {
0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8,
9:9, A:0, B:1, C:2, D:3, E:4, F:5, G:6, H:7,
I:8, J:9, K:10, L:11, M:12, N:13, O:14, P:15, Q:16,
R:17, S:18, T:19, U:20, V:21, W:22, X:23, Y:24, Z:25
};
CodiceFiscale.OMOCODIA_TABLE = {
"0":"L", "1":"M", "2":"N", "3":"P", "4":"Q",
"5":"R", "6":"S", "7":"T", "8":"U", "9":"V"}
CodiceFiscale.CHECK_CODE_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
CodiceFiscale.CODICI_CATASTALI = catastalCodes
module.exports = CodiceFiscale;

View File

@ -2,12 +2,11 @@
"name": "codice-fiscale-js",
"version": "1.0.0",
"description": "Calcolo del codice fiscale",
"main": "codice.fiscale.js",
"main": "lib/codice.fiscale.js",
"directories": {
"test": "tests"
},
"dependencies": {
},
"dependencies": {},
"devDependencies": {
"jasmine-core": "^2.4.1",
"karma": "^0.13.22",
@ -15,12 +14,18 @@
"karma-jasmine": "^0.3.7",
"karma-phantomjs-launcher": "^1.0.0",
"phantomjs-prebuilt": "^2.1.5",
"gulp-rename": "^1.2.2",
"gulp-uglify": "^1.5.3"
"uglify-js": "^2.8.11",
"uglifyjs-webpack-plugin": "^0.3.0",
"webpack": "^2.2.1"
},
"scripts": {
"build": "webpack",
"pretest": "npm run build",
"test": "karma start"
},
"author": "Luca Vandro",
"contributors": [
"Walter Barbagallo <brb.walter@gmail.com>"
],
"license": "MIT"
}

View File

@ -43,3 +43,11 @@ Get all the omocodie for a given Codice Fiscale. It returns an array of strings
```js
var omocodie = CodiceFiscale.getOmocodie("VNDLDL10A01G410Z");
```
-------
## Available npm scripts:
- `npm run build`: build the bundle into `dist` directory.
- `npm run test`: launch the karma tests.

19
webpack.config.js Normal file
View File

@ -0,0 +1,19 @@
const path = require('path'),
UglifyJSPlugin = require('uglifyjs-webpack-plugin');
module.exports = {
entry: {
'codice.fiscale': './lib/codice.fiscale.js'
},
output: {
// this will publish the module on the window object in order to support the karma tests
library: 'CodiceFiscale',
libraryTarget: 'window',
filename: '[name].js',
path: path.resolve(__dirname, 'dist')
},
plugins: [
new UglifyJSPlugin()
]
};

2484
yarn.lock Normal file

File diff suppressed because it is too large Load Diff