Расчет КВС (коэффициент возраста и стажа водителя) на 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.