встала задача сравнивать в одном приложении данные по клиенту, которые вносит оператор с теми что уже были там до него.
правило - нельзя позволить менять имя и фамилию пользователя на что-то кардинально иное, при этом нужно позволить поправить ошибку в имени/фамилии.
пример: нам пришло "Vasiliy" "Pupkinn", в паспорте "Vasili" "Pupkin". нужно позволить оператору поправить фамилию и имя, но запретить менять его, например на Vasili Terkin.
допустимый уровень изменений - 2 знака в имени, 2 знака в фамилии. если хоть где-то изменились 3+ знака - ничего не меняем.
написал тупо в лоб.
- если длина обоих стрингов равна - просто стандартно проходим циклом посимвольно и считаем отличия.
- если отличия в длине = 2 знака, добиваем стринг который короче точками на месте отличий и дальше как будто длина равна (после второй точки брейк цикла, нам нужно только сравнять длину, если отличий в стрингах больше 2х, это все равно будет фейл).
- если отличие в длине = 1 знак, считаем по "длинному" стрингу совпадения, потом переворачиваем его и опять считаем совпадения "с конца". дальше из длины "длинного" стринга вычитаем кол-во совпадений - в резултате имеем кол-во отличий в стринге.
- все остальные кейсы просто считаются по первому варианту, они 100% фейл и меня не интересует точность.
в продакшн пока не внедрял, думаю еще нет ли где промаха.
может кто-то писал что-то подобное и подскажет умность какую, которую я упустил?
правило - нельзя позволить менять имя и фамилию пользователя на что-то кардинально иное, при этом нужно позволить поправить ошибку в имени/фамилии.
пример: нам пришло "Vasiliy" "Pupkinn", в паспорте "Vasili" "Pupkin". нужно позволить оператору поправить фамилию и имя, но запретить менять его, например на Vasili Terkin.
допустимый уровень изменений - 2 знака в имени, 2 знака в фамилии. если хоть где-то изменились 3+ знака - ничего не меняем.
написал тупо в лоб.
- если длина обоих стрингов равна - просто стандартно проходим циклом посимвольно и считаем отличия.
- если отличия в длине = 2 знака, добиваем стринг который короче точками на месте отличий и дальше как будто длина равна (после второй точки брейк цикла, нам нужно только сравнять длину, если отличий в стрингах больше 2х, это все равно будет фейл).
- если отличие в длине = 1 знак, считаем по "длинному" стрингу совпадения, потом переворачиваем его и опять считаем совпадения "с конца". дальше из длины "длинного" стринга вычитаем кол-во совпадений - в резултате имеем кол-во отличий в стринге.
- все остальные кейсы просто считаются по первому варианту, они 100% фейл и меня не интересует точность.
в продакшн пока не внедрял, думаю еще нет ли где промаха.
может кто-то писал что-то подобное и подскажет умность какую, которую я упустил?