기본 썸네일 이미지

JAN(Bar)Code 생성 QT Sample Source

2023. 11. 2. 15:23·DEV/C++

JAN Code는 쉽게 말해서
일본에서 사용되는 바코드의 형태이다. (JAN 자체가 Japanese Article Numbering 의 약자)

 

바코드와 같이 각 Index별로 의미하는 값이 정해진다

(참조 :https://www.gs1jp.org/code/jan/procedure.html)

실제 구현 코드보면 글보다 더 쉽다..

#C++/QT 사용

#include <QString>
#include <QVector>
#include <QRegularExpression>

bool validateCode(const QString& code, int length)
{
    QRegularExpression regex("^[0-9]{" + QString::number(length) + "}$");
    QRegularExpressionMatch match = regex.match(code);
    return match.hasMatch();
}

bool validateManufacturerCode(const QString& manufacturerCode)
{
    // 제조사 코드의 유효성 검증
    return validateCode(manufacturerCode, 5);//(예: 5자리의 숫자)
}

bool validateProductCode(const QString& productCode)
{
    // 제품 코드의 유효성 검증 
    return validateCode(productCode, 5); //(예: 5자리의 숫자)
}

int calculateCheckDigit(const QString& number) {
    QVector<int> digits;

    for (QChar c : number) {
        digits.push_back(c.digitValue());
    }

    int oddSum = 0;
    int evenSum = 0;
    int total = 0;

    for (int i = 0; i < digits.size(); ++i) {
        if (i % 2 == 0) {
            oddSum += digits[i];
        }
        else {
            evenSum += digits[i];
        }
    }

    total = (oddSum * 3) + evenSum;
    int checkDigit = (10 - (total % 10)) % 10;

    return checkDigit;
}


QString generateJANCode(const QString& manufacturerCode, const QString& productCode) {
    QString countryCode = "49"; //일본 국가 코드
	//Code 순서 ( 국가코드 + 제조사코드 + 제품코드 )
    QString combinedCode = countryCode + manufacturerCode + productCode;
    int checkDigit = calculateCheckDigit(combinedCode);

    QString janCode = combinedCode + QString::number(checkDigit);
    return janCode;
}

bool checkJANCode(const QString& janCode) {
    QString reversedCode = janCode.mid(0, janCode.size() - 1);
    std::reverse(reversedCode.begin(), reversedCode.end());

    int oddSum = 0;
    int evenSum = 0;

    for (int i = 0; i < reversedCode.size(); ++i) {
        int digit = reversedCode[i].digitValue();

        if (i % 2 == 0) {
            oddSum += digit;
        }
        else {
            evenSum += digit;
        }
    }

    int total = (oddSum * 3) + evenSum;
    int checkDigit = (10 - (total % 10)) % 10;

    return checkDigit == janCode[janCode.size() - 1].digitValue();
}

bool MakeJanCode()
{
	QString manufacturerCode = "12345"; //제조사 코드
    if(!validateManufacturerCode(manufacturerCode))
    	return false;
    
    QString productCode = "00001"; //제품코드
    if(!validateProductCode(productCode))
    	return false;

	//Generate JanCode
    QString janCode = generateJANCode(manufacturerCode, productCode);

    // Print the JAN code
    qDebug() << "JANCode: " << janCode;

    bool res = checkJANCode(janCode);
    if (res) 
        qDebug() << "Success"; 
	else  qDebug() << "Fail"; 
}

 

일본에 판매하는 제품에 대한 코드 이기 때문에 
국가 코드는 일본 국가 코드인 49로 고정(45도 OK) 
판매 제품의 제조사 코드와  제품 코드값을 입력하여 최종 JAN Code 를 생성한다.

저작자표시 비영리 동일조건

'DEV > C++' 카테고리의 다른 글

순환 종속(Circular Dependency) 와 전방 선언(Forward Declaration)  (0) 2025.02.26
헤더 중복 방지 #pragma once 와 Include Guard 차이  (0) 2024.05.20
[MFC] Static Control 배경 투명화  (0) 2021.07.07
[MFC]Dialog UPDATE_COMMAND_UI 안먹는 문제  (0) 2021.07.05
[MFC] CheckBox, RadioButton 체크 옵션  (0) 2021.07.05
'DEV/C++' 카테고리의 다른 글
  • 순환 종속(Circular Dependency) 와 전방 선언(Forward Declaration)
  • 헤더 중복 방지 #pragma once 와 Include Guard 차이
  • [MFC] Static Control 배경 투명화
  • [MFC]Dialog UPDATE_COMMAND_UI 안먹는 문제
retire
retire
    반응형
  • retire
    NeedRetire
    retire
  • 전체
    오늘
    어제
    • 분류 전체보기 (22)
      • DEV (21)
        • C++ (9)
        • Jenkins (6)
        • Socket (4)
        • NSIS (2)
      • PC Tips (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    include guard
    VIAddVersionKey
    MFC
    모니터인치
    헤더중복방지
    build step
    버전 설정
    순환 종속
    VIProductVersion
    JAN code
    c2143
    c++
    Static Control
    monitorinfoview
    NSIS
    #pragma once
    NSIS 함수
    c4430
    jenkins 설치
    c2238
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
retire
JAN(Bar)Code 생성 QT Sample Source
상단으로

티스토리툴바