module fb { export class MaeklarObjektBesiktning extends MaeklarObjektBesiktningDOGen { getForeignKeyObject(): fb.IForeignKeyObject { return { entity: fb.ForeignKeyEntity.MAEKLAROBJEKT, key: this.MaeklarObjektId.value } } validation() { if (this.OCR !== null || this.OCR === undefined) { this.setValidation(this, fb.MaeklarObjektBesiktning.getValidation()); } } static getValidation() { return { 'OCR': { customValidation: function (data) { return data && (!data.value || fb.MaeklarObjektBesiktning.valideraOCRnummer(data.value)); }, customValidationErrorMessage: 'MAEKLAROBJEKT_BESTAELL.OCR_FELAKTIG_DATA' } } } static valideraOCRnummer(val: number): boolean { let ocrnummer = val.toString(); var nonNumbers = new RegExp('[^0-9]'); if (nonNumbers.test(ocrnummer)) { return false; } var res1 = 0; var res = 0; //resultatet av sammanräkningen var ksiffra1 = 0; var ksiffra = 0; var asiffra = 0; //från OCR-numret aktuell siffra var l = ocrnummer.length; //antal siffror i ocrnummer-fältet var bsiffra = 0; // kontrollsiffran var ocrstring = ocrnummer; // gör värdet i ocrnummer-fältet till en sträng var b = 0; var ocrl = l - 1; // för att inte räkna med sista siffran i 10-moduls-beräkningen var resm2 = 0; // andra siffran vid tal större än 9 bsiffra = Number(ocrstring.substr(ocrl, 1)); // kontrollsiffran direkt tagen ur OCR-strängen var raknestart = l - 2; // ger positionen där vi ska börja räkna (från höger) var raknare = 0; // för att hålla reda på vilket varv vi är på for (var a = raknestart; a !== -1; a--) //loop som går igenom ocrsträngen förutom checksiffran { asiffra = Number(ocrstring.substr(a, 1)); //asiffra får värdet av den aktuella siffran if (raknare % 2 === 0) // om aktuell siffra´s position är jämn (utifrån att vi börjar på 0) { res1 = 0; res1 = 2 * asiffra; if (res1 > 9) // om beräkningen blir 10 eller mer { resm2 = res1 - 10; // räknar ut den andra siffran res = res + 1 + resm2; // adderar siffrorna } else // om beräkningen blir mindre än 10 { res = res + res1; } } else // om aktuell siffra´s position är ojämn (utifrån att vi börjar på 0) { // udda varv res1 = 0; res1 = 1 * asiffra; res = res + res1; } raknare = raknare + 1; } ksiffra1 = res % 10; // tar bort tio-tals-siffran från res-variablen if (ksiffra1 === 0) { ksiffra = 0; //kontrollsiffran blir en nolla } else { ksiffra = 10 - ksiffra1; // räknar ut kontroll-siffran } asiffra = 0; if (ksiffra === bsiffra) { return true; } else { return false; } } } }