Расчет КВС (коэффициент возраста и стажа водителя) на JS
Сейчас работаю над одним новым интересным проектом – что-то типа сервиса для страховых и водителей. Сайт на Laravel 9, внутри несколько баз данных, интересные расчеты – в частности расчет ОСАГО. Для этого расчета требуется знать и получать несколько коэффициентов, и опять же в частности КВС (коэффициент возраста и стажа водителя). Вот ниже в заметке мы его и получим на JavaScript.
Сам коэффициент определяется исходя из двух параметров: возраста водителя (берется самый младший) и его стажа. Таблица ниже:
Таким образом, получается, что если мы будем иметь дату рождения водителя и дату начала его стажа, то разница с текущей датой и будут эти два параметра. Однако, тут надо не просто вычесть год из текущего, а поработать именно с датой. Функция получения разницы в годах (полных) между заданной датой и текущей
function getFullAge(dat){
let date_f = new Date(dat);
let now = new Date(); //получаем сегодняшнюю дату
let today = new Date(now.getFullYear(), now.getMonth(), now.getDate()); //сегодня
let dat_year = new Date(date_f.getFullYear(), date_f.getMonth(), date_f.getDate());
let dat_year_now = new Date(today.getFullYear(), date_f.getMonth(), date_f.getDate());
let age = today.getFullYear() - dat_year.getFullYear(); //Возраст = текущий год - год рождения
//Если ДР в этом году ещё предстоит, то вычитаем из age один год
if (today < dat_year_now) {
age = age-1;
}
return age;
}
В принципе тут все просто. Получаем сегодняшнюю дату в нужном формате и дату рождения (или получения прав) и вычитаем друг из друга. Если еще не наступил день в этом году (день рожденья или день начала стажа), то год минусом.
Вторая функция это уже расчет по таблице КВС
function calcKBC(age, exp){
let arr = new Array();
let arr16_21 = [2.27, 1.92, 1.84, 1.65, 1.62, 0, 0 ,0];
let arr22_24 = [1.88, 1.72, 1.71, 1.13, 1.1, 1.09, 0 ,0];
let arr25_29 = [1.72, 1.6, 1.54, 1.09, 1.08, 1.07, 1.02 ,0];
let arr30_34 = [1.56, 1.50, 1.48, 1.05, 1.04, 1.01, 0.97 ,0.95];
let arr35_39 = [1.54, 1.47, 1.46, 1, 0.97, 0.95, 0.94 ,0.93];
let arr40_49 = [1.5, 1.44, 1.43, 0.96, 0.95, 0.94, 0.93 ,0.91];
let arr50_59 = [1.46, 1.4, 1.39, 0.93, 0.92, 0.91, 0.9 ,0.86];
let arr60 = [1.43, 1.36, 1.35, 0.91, 0.9, 0.89, 0.88 ,0.83];
if (age <= 21){
arr = arr16_21;
}
if (age >= 22 && age <= 24){
arr = arr22_24;
}
if (age >= 25 && age <= 29){
arr = arr25_29;
}
if (age >= 30 && age <= 34){
arr = arr30_34;
}
if (age >= 35 && age <= 39){
arr = arr35_39;
}
if (age >= 40 && age <= 49){
arr = arr40_49;
}
if (age >= 50 && age <= 59){
arr = arr50_59;
}
if (age >= 60){
arr = arr60;
}
let chet = exp;
if (exp == 4){
chet = 3;
}
if (exp >=5 && exp <=6){
chet = 4;
}
if (exp >=7 && exp <=9){
chet = 5;
}
if (exp >=10 && exp <=14){
chet = 6;
}
if (exp > 14){
chet = 7;
}
return arr[chet];
}
Скорее всего тут можно и более красивее и короче сделать (двумерным массивом например), но и так наглядно видно что и где и главное – все менять чрезвычайно просто. Несколько массивов (каждый для своего промежутка возраста), содержащих коэффициенты по стажу – выбираем нужно значение исходя из аргументов функции.
Вот так просто можно рассчитать КВС на JavaScript.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Программы на заказ
Отзывы
Контакты