2016-12-04 2 views
2

프로젝트에 대해 C# 언어를 사용하고 있습니다. 사용자에게 큰 (9+ 숫자) 번호를 제공해야합니다.이 번호는 다른 시스템으로 다시 입력해야합니다 (나중에 데이터 상관 관계를 위해). 사용자가 오류없이 손으로 큰 숫자를 입력하면 거의 불가능합니다.알고리즘 단축 +10 디지트 문자열

나는 base64를 사용하여 그 수를 줄이기위한 해결책을 찾지 만, 내가 찾은 모든 코드는 문자와 숫자의 문자열 조합을 만들 것입니다. 큰 숫자를 더 작게 만들 수있는 간단한 수학 알고리즘이 있습니까? 결과는 영문자가 아닌 숫자 여야합니다.

+7

어떻게 [0-9]을 [0-9]로 인코딩하고 더 적은 위치를 사용하여 그렇게 할 수 있습니까? 그룹화를 위해 대시를보고 체크섬 번호를 추가하십시오. – CodeCaster

+0

가능합니다. 이것은 uuencode/uudecode라고합니다. 타르 패킹 (zip) 용 유닉스 운영체제에서 사용됩니다. ASCII는 8 비트이고 숫자는 4 비트이므로 숫자를 적게 사용하려면 숫자를 8 비트로 압축 할 수 있습니다. uuenocode는 인쇄 가능한 문자로만 문자를 압축하므로 ASCII 제어 문자는 사용되지 않으며 128에서 255 이상의 문자는 사용되지 않습니다. uuencode는 전자 메일 표준에 사용되므로 System.Web.Mail.MailEncoding.UUEncode – jdweng

+0

@jdweng _ "결과는 ** 숫자 여야합니다 ** 숫자가 아닙니다."_ – CodeCaster

답변

0

잘못된 방식으로 문제를 해결하면 번호 크기를 변경하는 대신 사용자가 숫자를 지나치게 복사하는 편리한 방법을 만들 수 있습니다. 숫자를 버퍼로 복사하는 간단한 키 이벤트가 있으면 사용자는 번호를 쓰지 않아도됩니다.

+0

안녕하세요. 불행히도 과학은 숫자가 이미지에 인쇄되어 있으며이 이미지는 소셜 네트워크에서 우리 회사 제품을 광고하는 데 사용됩니다 –

+0

QR 코드로 게시하지 않으시겠습니까? – Martheen

0

숫자 만 사용하여 숫자를 줄이면 작동하지 않습니다.

정말로 필요한 것은 오류 검사의 일부 양식입니다. 매우 잘 작동하는 것은 거의 모든 오타를 감지하는 Verhoeff 알고리즘입니다. 온라인으로 찾는 많은 예가 있습니다. https://www.codeproject.com/articles/15939/verhoeff-check-digit-in-c

+0

번호는 휴대 전화를 통해 메시지로 고객이 작성합니다. 복잡한 텍스트를 입력하지 않아도됩니다. –

+0

아니요, Verhoeff 알고리즘은 한 자리수를 더 추가하지만 가장 일반적인 오류를 감지합니다. 그냥 시도해보고 놀란다. – Frank

0

당신은 당신의 큰 숫자를 해시 해시 알고리즘을 사용할 수 있지만 해시 충돌을 처리해야

좋아. 구현하기 매우 쉬운 것 중 하나는 체크섬 sum16입니다. https://en.wikipedia.org/wiki/List_of_hash_functions

sum16을 보면 0-65536 만 가능합니다. sum18에 대해 생각해보십시오.