{"id":1638968,"date":"2025-07-23T11:33:46","date_gmt":"2025-07-23T02:33:46","guid":{"rendered":"https:\/\/www.hanwhavision.com\/?page_id=1638968"},"modified":"2025-09-01T13:43:51","modified_gmt":"2025-09-01T04:43:51","slug":"certification-verification","status":"publish","type":"page","link":"https:\/\/www.hanwhavision.com\/en\/support\/learning\/certification-verification\/","title":{"rendered":"Certification Verification"},"content":{"rendered":"\n<!-- STANDARD HERO -->\n<section class=\"section-hero-standard  short-version\" >\n\t<div class=\"wrapper\">\n\t\t<div class=\"container\">\n\t\t\t<div class=\"standard-hero-block \">\n\t\t\t\t\t\t\t\t<div class=\"media-cell\">\n\t\t\t\t\t<div class=\"media-container ratio-16by9 \" >\n\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/www.hanwhavision.com\/wp-content\/uploads\/2025\/07\/hero-verification.png\" class=\"media\" alt=\"\" loading=\"lazy\" width=\"100%\" height=\"100%\" \/>\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t<div class=\"content-cell\">\n\t\t\t\t\t<div class=\"content-wrap\">\n\t\t\t\t\t\t                        \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h1 class=\"hero-title\">Certification Verification<\/h1>\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\t<\/div>\n<\/section>\n\n\n\n<style>\n\thr.divider-line{margin:24px 0; border:0 none; border-top:1px solid #000000; opacity:1;}\n\thr.divider-line.border-color-light{border-color:#D1D1D1;}\n\t.how-to-module{padding:20px;}\n\t.how-to-module .cell:last-child{margin-top:20px;}\n\t.how-to-module ol,.how-to-module p{font-size:16px;margin:0;}\n\t.how-to-module hr.divider-line{margin:8px 0 12px;}\n\t.input-button-group{display:flex;gap:8px;}\n\t.input-button-group input[type=\"text\"]{flex:1}\n\t.certification-table{table-layout:fixed; border:1px solid #D1D1D1;}\n\t.certification-table td,.certification-table th{padding:12px;font-weight:500; vertical-align: top;}\n\t.certification-table thead tr{border-bottom:1px solid #000000;}\n\t.certification-table tbody tr td:not(:last-child){border-right:1px solid #d1d1d1;}\n\t.certification-table tbody tr:not(:first-child) td{border-top:1px solid #d1d1d1;}\n\t.certification-table .mark-tag{font-size:12px;line-height:1;display:inline-flex;height:22px;align-items: center; padding:0 8px; border:1px solid #5C5C5C; text-transform: uppercase;}\n\t.certification-table .mark-tag.valid{border-color:#F4731F; color:#F4731F;}\n\t@media (min-width:768px) {\n\t\thr.divider-line{margin:32px 0;}\n\t\t.how-to-module{padding:24px; display:flex; gap:24px;}\n\t\t.how-to-module .cell {flex:1;max-width:50%;}\n\t\t.how-to-module .cell:last-child{margin-top:0;}\n\t\t.certification-table td,.certification-table th{padding:18px}\n\t}\n\t@media (min-width:992px) {\n\t\t.content-block .content-cell{max-width:1140px; margin-left:auto; margin-right:auto;}\n\t}\n\t@media (min-width:1200px) {\n\t\thr.divider-line{margin:40px 0;}\n\t\t.certification-table td,.certification-table th{padding:24px}\n\t}\n<\/style>\n<script>\n\tdocument.addEventListener('DOMContentLoaded', function() {\n\t\t\/\/ reset page\n\t\tresetResultDisplay();\n\n\t\tdocument.frm_docebo_check.submit.disabled = false;\n\t});\n\n\t\/\/ submit handler\n\tfunction submit_frm() {\n\t\t\/\/ reset page\n\t\tresetResultDisplay();\n\n\t\tvar f = document.frm_docebo_check;\n\t\t\/\/ var errorMsgElement = document.getElementById(\"ErrorMsg\");\n\t\t\n\t\t\/\/ get search term\n\t\tvar searchTerm = sanitizeSearchTerm( f.sterm.value.trim() );\n\n\t\tif (!isValidSearchTerm(searchTerm)) {\n\t\t\tdisplay_error(\"Please enter a full name or a valid email address.\");\n\t\t\treturn false;\n\t\t} \n\t\t\/\/ else {\n\t\t\/\/ \terrorMsgElement.textContent = \"\";\n\t\t\/\/ \terrorMsgElement.classList.add('d-none');\n\t\t\/\/ }\n\n\t\t\/\/ enable loading spinner\n\t\ttoggleSubmitButtonAndSpinner(true);\n\n\t\tjQuery.ajax({\n\t\t\turl: 'https:\/\/www.hanwhavision.com\/wp-admin\/admin-ajax.php',\n\t\t\ttype: 'POST',\n\t\t\tdata: {\n\t\t\t\taction: 'docebo_check',\n\t\t\t\tsearch_text: searchTerm,\n\t\t\t},\n\t\t\tsuccess: function(response) {\n\t\t\t\tif (response.success) {\n\t\t\t\t\tdisplay_user_data_table( response.data );\n\t\t\t\t} \n\t\t\t\telse {\n\t\t\t\t\tconsole.log(response.data.message);\n\t\t\t\t\tdisplay_error( response.data.message );\n\t\t\t\t}\n\t\t\t},\n\t\t\terror: function(xhr, status, error) {\n\t\t\t\tdisplay_error(\"An error occurred while fetching the data. Please try again.\");\n\t\t\t},\n\t\t\tcomplete: function() {\n\t\t\t\ttoggleSubmitButtonAndSpinner(false);\n\t\t\t}\n\t\t});\n\n\t\treturn false;\n\t}\n\n\tfunction sanitizeSearchTerm(searchTerm) {\n\t\tvar div = document.createElement('div');\n\t\tdiv.textContent = searchTerm;\n\t\treturn div.innerHTML;\n\t}\n\n\tfunction isValidSearchTerm(searchTerm) {\n\t\t\/\/ Check if it's a valid email address\n\t\tvar emailRegex = \/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$\/;\n\t\tif (emailRegex.test(searchTerm)) {\n\t\t\treturn true;\n\t\t}\n\n\t\t\/\/ Check if it's a valid full name (at least first and last name)\n\t\tvar nameParts = searchTerm.split(' ');\n\t\tif (nameParts.length >= 2) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tfunction toggleSubmitButtonAndSpinner(isRequestInProgress) {\n\t\tvar f = document.frm_docebo_check;\n\t\tf.submit.disabled = isRequestInProgress;  \/\/ Disable or enable the submit button\n\t\tjQuery('.wpcf7-spinner').css('visibility', isRequestInProgress ? 'visible' : 'hidden');  \/\/ Show or hide the spinner\n\t}\n\n\tfunction resetResultDisplay() {\n\t\tvar errorMsgElement = document.getElementById(\"ErrorMsg\");\n\t\tvar resultBlock = document.getElementById(\"ResultBlock\");\n\t\tvar resultNoText = document.getElementById(\"NoResultErrorText\");\n\t\tvar resultListTable = document.getElementById(\"ResultListTable\");\n\t\tvar resultDetail = document.getElementById(\"ResultDetail\");\n\t\tvar searchTermElement = resultDetail.querySelector(\".search-term\");\n\t\tvar searchCountElement = resultDetail.querySelector(\".result-count\");\n\n\t\t\/\/ error message\n\t\terrorMsgElement.textContent = \"\";\n\t\terrorMsgElement.classList.add('d-none');\n\n\t\t\/\/ remove any previous error message\n\t\tresultNoText.textContent = \"\";\n\t\tresultNoText.classList.add(\"d-none\");\n\n\t\t\/\/ clear result count and search term\n\t\tsearchTermElement.textContent = \"\";\n\t\tsearchCountElement.textContent = \"\";\n\t\tresultDetail.classList.add(\"d-none\");\n\n\t\t\/\/ clear table\n\t\tresultListTable.querySelector(\"tbody\").innerHTML = \"\";\n\t\tresultListTable.classList.add(\"d-none\");\n\n\t\t\/\/ hide the result block\n\t\tresultBlock.classList.add(\"d-none\");\n\t}\n\n\tfunction display_user_data_table(data) {\n\t\tvar resultBlock = document.getElementById(\"ResultBlock\");\n\t\tvar resultNoText = document.getElementById(\"NoResultErrorText\");\n\t\tvar resultListTable = document.getElementById(\"ResultListTable\");\n\t\tvar resultDetail = document.getElementById(\"ResultDetail\");\n\t\tvar searchTermElement = resultDetail.querySelector(\".search-term\");\n\t\tvar searchCountElement = resultDetail.querySelector(\".result-count\");\n\t\t\n\t\tvar total = (data.user_data && data.user_data.length) ? data.user_data.length : 0;\n\n\t\t\/\/ display count and search term\n\t\tsearchTermElement.textContent = data.search_term;\n\t\tsearchCountElement.textContent = total;\n\t\tresultDetail.classList.remove(\"d-none\");\n\n\t\tif ( total > 0 ) {\n\t\t\t\/\/ draw result to table\n\t\t\tvar j = 1;\n\t\t\tdata.user_data.forEach(function(item) {\n\t\t\t\tvar rowCount = item.certifications.length;\n\t\t\t\tfor(var i=0; i<rowCount; i++) {\n\t\t\t\t\t\/\/ Create a new row for each user\n\t\t\t\t\tvar row = document.createElement('tr');\n\t\t\t\t\tif(j % 2 === 1) row.classList.add('bg-light-grey');\n\n\t\t\t\t\t\/\/ add name and country cell for first row, if rowspan is more than 1\n\t\t\t\t\tif(i == 0) {\n\t\t\t\t\t\t\/\/ Name and Country columns\n\t\t\t\t\t\tvar nameCell = document.createElement('td');\n\t\t\t\t\t\tif(rowCount > 1) nameCell.rowSpan = rowCount;\n\t\t\t\t\t\tnameCell.textContent = item.fullname;\n\t\t\t\t\t\trow.appendChild(nameCell);\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar countryCell = document.createElement('td');\n\t\t\t\t\t\tif(rowCount > 1) countryCell.rowSpan = rowCount;\n\t\t\t\t\t\tcountryCell.textContent = item.city + (item.city ? ', ' : '' ) + item.country;\n\t\t\t\t\t\trow.appendChild(countryCell);\n\t\t\t\t\t}\n\n\t\t\t\t\t\/\/ certification cells\n\t\t\t\t\tvar cert_name = item.certifications[i].name;\n\t\t\t\t\tvar cert_date = item.certifications[i].expiring_at ? convertUtcToLocalDate( item.certifications[i].expiring_at ) : '-';\n\t\t\t\t\tvar expired = item.certifications[i].expiring_at ? isDateExpired(item.certifications[i].expiring_at) : true;\n\n\t\t\t\t\tvar certificationsCell = document.createElement('td');\n\t\t\t\t\tcertificationsCell.textContent = cert_name;\n\t\t\t\t\trow.appendChild(certificationsCell);\n\n\t\t\t\t\tvar expiryDateCell = document.createElement('td');\n\t\t\t\t\texpiryDateCell.textContent = cert_date;\n\t\t\t\t\trow.appendChild(expiryDateCell);\n\n\t\t\t\t\tvar statusCell = document.createElement('td');\n\t\t\t\t\tvar statusSpan = document.createElement('span');\n\t\t\t\t\tstatusSpan.classList.add('mark-tag');\n\t\t\t\t\tstatusSpan.textContent = expired ? 'Expired' : 'Valid';  \/\/ If status is true, \"Valid\", else \"Expired\"\n\t\t\t\t\tif( ! expired ) statusSpan.classList.add('valid');\n\t\t\t\t\tstatusCell.appendChild(statusSpan);\n\t\t\t\t\trow.appendChild(statusCell);\n\n\t\t\t\t\t\/\/ Append the row to the table body\n\t\t\t\t\tresultListTable.querySelector('tbody').appendChild(row);\n\t\t\t\t}\n\n\t\t\t\tj++;\n\t\t\t});\n\n\t\t\tresultListTable.classList.remove(\"d-none\");\n\t\t}\n\t\telse {\n\t\t\tresultNoText.textContent = \"No result found for the provided details, or the partner has not given consent.\";\n\t\t\tresultNoText.classList.remove(\"d-none\");\n\t\t}\n\n\t\t\/\/ show result block\n\t\tresultBlock.classList.remove(\"d-none\");\n\t}\n\n\tfunction display_error(msg) {\n\t\tvar errorMsgElement = document.getElementById(\"ErrorMsg\");\n\t\terrorMsgElement.textContent = msg;\n\t\terrorMsgElement.classList.remove('d-none');\n\t}\n\n\tfunction convertUtcToLocalDate(utcDateString) {\n\t\t\/\/ Create a new Date object from the UTC string\n\t\tvar utcDate = new Date(utcDateString + \" UTC\");  \/\/ Appending ' UTC' ensures it's parsed as UTC time\n\t\t\n\t\t\/\/ Convert to the local timezone and return the date in the browser's local format\n\t\tvar localDate = utcDate.toLocaleDateString();  \/\/ This will return the date in the local format (MM\/DD\/YYYY, etc.)\n\t\t\n\t\treturn localDate;\n\t}\n\n\tfunction isDateExpired(utcDateString) {\n\t\t\/\/ Create a Date object for the given UTC date string\n\t\tvar utcDate = new Date(utcDateString + \" UTC\");  \/\/ Appending ' UTC' to ensure it's parsed as UTC time\n\n\t\t\/\/ Get the current date and time in UTC\n\t\tvar currentDate = new Date();  \/\/ By default, this is in local time\n\t\tvar currentUtcDate = new Date(currentDate.toISOString());  \/\/ Convert current date to UTC\n\n\t\t\/\/ Compare the two dates: if the UTC date is greater than the current UTC time, it's not expired\n\t\tif (utcDate > currentUtcDate) {\n\t\t\treturn false;  \/\/ Date is not expired (future date)\n\t\t} else {\n\t\t\treturn true; \/\/ Date is expired (past date)\n\t\t}\n\t}\n<\/script>\n<section class=\"section\">\n\t<div class=\"wrapper\">\n\t\t<div class=\"container\">\n\t\t\t<div class=\"content-block\">\n\t\t\t\t<div class=\"content-cell\">\n\t\t\t\t\t<div class=\"info-block\">\n\t\t\t\t\t\t<h2>Verify a certification<\/h2>\n\t\t\t\t\t\t<p class=\"p1 color-black\">Welcome! This service allows you to verify the certification status of individuals who have completed our <nobr>\"<span class=\"hwFont\">Hanwha Vision<\/span><\/nobr> Certified\" training programs.<\/p>\n\n\t\t\t\t\t\t<div class=\"how-to-module bg-light-grey\">\n\t\t\t\t\t\t\t<div class=\"cell\">\n\t\t\t\t\t\t\t\t<h5>How to use<\/h5>\n\t\t\t\t\t\t\t\t<hr class=\"divider-line\" \/>\n\t\t\t\t\t\t\t\t<ol>\n\t\t\t\t\t\t\t\t\t<li>Enter the full name or email address used during the training registration.<\/li>\n\t\t\t\t\t\t\t\t\t<li>Click 'Search' to see if the individual is certified.<\/li>\n\t\t\t\t\t\t\t\t<\/ol>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"cell\">\n\t\t\t\t\t\t\t\t<h5>Important<\/h5>\n\t\t\t\t\t\t\t\t<hr class=\"divider-line\" \/>\n\t\t\t\t\t\t\t\t<p>To comply with privacy laws and our privacy policy, we can only provide certification status for partners who have given their consent to this verification service. If a partner has not authorized this, their details will not appear in the search results.<\/p>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div class=\"form-block mt-24\">\n\t\t\t\t\t\t<form id=\"frm_docebo_check\" name=\"frm_docebo_check\" onsubmit=\"return false;\">\n\t\t\t\t\t\t\t<div class=\"form-grid-block\">\n\t\t\t\t\t\t\t\t<div class=\"form-row\">\n\t\t\t\t\t\t\t\t\t<div class=\"form-col\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"input-button-group\">\n\t\t\t\t\t\t\t\t\t\t\t<input \n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"40\" \n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"form-control\" \n\t\t\t\t\t\t\t\t\t\t\t\tid=\"sterm\" \n\t\t\t\t\t\t\t\t\t\t\t\taria-required=\"true\" \n\t\t\t\t\t\t\t\t\t\t\t\taria-invalid=\"false\" \n\t\t\t\t\t\t\t\t\t\t\t\tvalue=\"\"\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Search for full name or email address\" \n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"text\" \n\t\t\t\t\t\t\t\t\t\t\t\tname=\"sterm\" \n\t\t\t\t\t\t\t\t\t\t\t\tautocomplete=\"off\" \n\t\t\t\t\t\t\t\t\t\t\t\/>\n\t\t\t\t\t\t\t\t\t\t\t<div style=\"position: relative\">\n\t\t\t\t\t\t\t\t\t\t\t\t<button type=\"submit\" disabled class=\"btn mt-0\" name=\"submit\" value=\"Submit\" onclick=\"submit_frm();\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tSearch\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"icon-font icon-magnify-glass\"><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<\/button>\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"wpcf7-spinner\"><\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t<p id=\"ErrorMsg\" class=\"mt-8 color-red d-none\" style=\"font-weight: 300\"><\/p>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/form>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"ResultBlock\" class=\"d-none\">\n\t\t\t\t\t\t<hr class=\"divider-line\" \/>\n\t\t\t\n\t\t\t\t\t\t<div class=\"module-block\">\n\t\t\t\t\t\t\t<div id=\"ResultDetail\" class=\"result-details d-none\">\n\t\t\t\t\t\t\t\t<h4 style=\"font-size: 24px\">\n\t\t\t\t\t\t\t\t\t<span class=\"result-count color-orange\"><\/span>\n\t\t\t\t\t\t\t\t\tSearch results for \n\t\t\t\t\t\t\t\t\t<span class=\"search-term color-orange\"><\/span>\n\t\t\t\t\t\t\t\t<\/h4>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t\t<hr class=\"divider-line border-color-light\" \/>\n\n\t\t\t\t\t\t\t<p id=\"NoResultErrorText\" class=\"p1 color-black d-none\"><\/p>\n\t\t\t\n\t\t\t\t\t\t\t<div id=\"ResultListTable\" class=\"table-responsive d-none\">\n\t\t\t\t\t\t\t\t<table class=\"certification-table\">\n\t\t\t\t\t\t\t\t\t<colgroup>\n\t\t\t\t\t\t\t\t\t\t<col width=\"20%\" style=\"min-width:200px\" \/>\n\t\t\t\t\t\t\t\t\t\t<col width=\"20%\" style=\"min-width:200px\" \/>\n\t\t\t\t\t\t\t\t\t\t<col width=\"20%\" style=\"min-width:200px\" \/>\n\t\t\t\t\t\t\t\t\t\t<col width=\"20%\" style=\"min-width:200px\" \/>\n\t\t\t\t\t\t\t\t\t\t<col width=\"20%\" style=\"min-width:200px\" \/>\n\t\t\t\t\t\t\t\t\t<\/colgroup>\n\t\t\t\t\t\t\t\t\t<thead>\n\t\t\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t\t\t<th>Name<\/th>\n\t\t\t\t\t\t\t\t\t\t\t<th>Country<\/th>\n\t\t\t\t\t\t\t\t\t\t\t<th>Certifications<\/th>\n\t\t\t\t\t\t\t\t\t\t\t<th>Expiry Date<\/th>\n\t\t\t\t\t\t\t\t\t\t\t<th>Status<\/th>\n\t\t\t\t\t\t\t\t\t\t<\/tr>\n\t\t\t\t\t\t\t\t\t<\/thead>\n\t\t\t\t\t\t\t\t\t<tbody>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/tbody>\n\t\t\t\t\t\t\t\t<\/table>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\t<\/div>\n<\/section>\n\n\n\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":55,"featured_media":0,"parent":1448961,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"v2024\/template-generic.php","meta":{"footnotes":""},"acf":[],"_links":{"self":[{"href":"https:\/\/www.hanwhavision.com\/en\/wp-json\/wp\/v2\/pages\/1638968"}],"collection":[{"href":"https:\/\/www.hanwhavision.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.hanwhavision.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.hanwhavision.com\/en\/wp-json\/wp\/v2\/users\/55"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hanwhavision.com\/en\/wp-json\/wp\/v2\/comments?post=1638968"}],"version-history":[{"count":7,"href":"https:\/\/www.hanwhavision.com\/en\/wp-json\/wp\/v2\/pages\/1638968\/revisions"}],"predecessor-version":[{"id":1642073,"href":"https:\/\/www.hanwhavision.com\/en\/wp-json\/wp\/v2\/pages\/1638968\/revisions\/1642073"}],"up":[{"embeddable":true,"href":"https:\/\/www.hanwhavision.com\/en\/wp-json\/wp\/v2\/pages\/1448961"}],"wp:attachment":[{"href":"https:\/\/www.hanwhavision.com\/en\/wp-json\/wp\/v2\/media?parent=1638968"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}